📄 jb4-1-6-2.htm
字号:
<!-- saved from url=(0022)http://internet.e-mail -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta name="Author" content="TF">
<meta name="generator" content="Microsoft FrontPage 4.0">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据库应用程序开发者的指南:从数据来源检索数据</title>
<link type="text/css" href="../jbdocs.css" rel="stylesheet">
</head>
<body bgcolor="#fefef2" style="FONT-SIZE: 9pt">
<h2><FONT
color=#0080FF size=3 ><b>存储过程:提示和建议</b></font></h2><hr>
译者名字: chenjn(JD013) <br>
邮件地址:<a href="mailto:chenjn@fulltop.com">chenjn@fulltop.com</a>
<blockquote class="bsku">
<p><font color="#FF0000">数据库应用开发是 JBuilder 专业版和企业版的一个特征。<br>分布式的应用开发是 JBuilder 企业版的一个特征。</font></p>
</blockquote>
<p>这一组话题包含了对你有帮助的建议</p>
<ul>
<li>理解使用一个存储过程的选项</li>
<li>利用教程创建一个过程</li>
</ul>
<a name="statement"></a>
<p><font size="3" color="#000080"><b>关于存储过程的退出顺序, SQL 语句,和服务器特定的程序调用的讨论</b></font></p>
<!--BNDX="stored procedures:creating;escape sequences;procedure calls:server-specific"-->
<!--BNDX="JDBC escape sequences;SQL statements:discussion of"-->
<p>当要向<code><font size="2">procedure</font></code>性质编辑器或代码中的 Stored Procedure Escape 或者 SQL Statement 域输入信息时, 你有三种类型的语句可用来输入。他们是:</p>
<ul>
<li>
<p>选择一个存在的过程。</p>
<p>单击<code>procedure</code>性质编辑器中的 Browse Procedures,来浏览一个存在的存储过程的数据库。一张 你所连接的数据库的可用进程名称列表将被显示。如果是InterBase服务器并且你选择了一个没有返回值的进程,你将收到效果通知。 如果你选择了一个没有返回值的进程, JBuilder 将尝试为那个程序调用生成正确的退出语法。然而, 你或许需要编辑自动产生的语句来正确对应于你的服务器的句法。对于另外的数据库而言,仅仅是那个进程的名字通过 Select Procedures 对话框被插入了而已。</p>
<p>如果过程正在期望参数, 你必须使他们与参数的列名相匹配。</p>
</li>
<li>输入一个 JDBC 程序的退出顺序。
<p>使用下列格式来输入一个 JDBC 程序的退出顺序:</p>
<ul>
<li>{call PROCEDURENAME (?,?,?,...)} for procedures</li>
<li>{?= call FUNCTIONNAME (?,?,?,...)} for functions</li>
</ul>
</li>
<li>
<p>输入服务器特定的程序调用语法。</p>
<p>当一个服务器允许独立的过程呼叫句法时,你可输入这样的语法来代替一个存在的存储过程或一个 JDBC 程序的退出顺序。例如,服务器特定的语法有可能是这个样子的:</p>
<ul>
<li>execute procedure PROCEDURENAME ?,?,?</li>
</ul>
</li>
</ul>
<p>在前两个例子当中,参数标记和问号可以用 ParameterName 表单中已命名的参数来替代。使用已命名参数的例子请参看"<a href="prov_procedure_disc2.html">范例: Oracle PL/SQL 存储过程中使用参数</a>".使用 InterBase 存储过程的范例请参看"<a href="prov_procedure_disc2.html">范例: 使用 InterBase 存储过程</a>".</p>
<!--***********************************************************************-->
<a name="manual"></a>
<p><font color="#000080" size="3"><b>手工地为教程创建表单和过程</b></font></p>
<!--BNDX="database tutorials:creating stored procedures;tutorials:creating stored procedures"-->
<!--BNDX="stored procedures:tutorial;SimpleStoredProcedure sample;ProcedureDataSet component:tutorial"-->
<p>存储过程由一组 SQL 语句组成。 These statements can easily be written and compiled in JBuilder by creating a Java file, entering the statements, then compiling the code. If you do not have access to the sample project SimpleStoredProcedure or if you would like to learn how to create a table and insert, update, and delete procedures from JBuilder, follow these steps: </p>
<ol>
<li>从菜单选择 File|Close All 。
</li>
<li>从菜单选择 File|New Project.
</li>
<li>在工程向导里更改文件目录和工程名为<code><font size="2">SimpleStoredProcedure/ProcSetUp/ProcSetUp.jpr</font></code> 。</li>
<li>
<p>选择 File|New, 然后选择 Class。</p>
</li>
<li>在 Class wizard 中更改 Class Name 为 <code>ProcSetUp</code> 。 单击 OK,创建文件 <code><font size="2">ProcSetUp.java</font></code>。
</li>
<li>在 Source 窗口编辑代码或者从在线帮助复制粘贴以下的代码:
<p>
<br>
package ProcSetUp;<br>
<br>
import com.borland.dx.dataset.*;<br>
import com.borland.dx.sql.dataset.*;<br>
import java.sql.*;<br>
<br>
public class CreateProcedures {<br>
<br>
public static void main(String[] args) throws DataSetException {<br>
Database database1 = new Database();<br>
database1.setConnection(new
ConnectionDescriptor("jdbc:interbase://<IP address or
localhost>/<path to .gdb file>", "SYSDBA",
"masterkey", false, "interbase.interclient.Driver"));<br>
try { database1.executeStatement("DROP PROCEDURE
GET_COUNTRIES"); } catch (Exception ex) {};<br>
try { database1.executeStatement("DROP PROCEDURE
UPDATE_COUNTRY"); } catch (Exception ex) {};<br>
try { database1.executeStatement("DROP PROCEDURE
INSERT_COUNTRY"); } catch (Exception ex) {};<br>
try { database1.executeStatement("DROP PROCEDURE
DELETE_COUNTRY"); } catch (Exception ex) {};<br>
database1.executeStatement(getCountriesProc);<br>
database1.executeStatement(updateProc);<br>
database1.executeStatement(deleteProc);<br>
database1.executeStatement(insertProc);<br>
database1.closeConnection();<br>
} <br>
<br>
static final String getCountriesProc = <br>
<br>
"CREATE PROCEDURE GET_COUNTRIES RETURNS (
/r/n"+<br>
" COUNTRY
VARCHAR(15),
/r/n"+<br>
" CURRENCY VARCHAR(10) )
AS
/r/n"+<br>
"BEGIN
/r/n"+<br>
" FOR SELECT c.country,
c.currency
/r/n"+<br>
" FROM country
c
/r/n"+<br>
" INTO
:COUNTRY,:CURRENCY
/r/n"+<br>
"
DO
/r/n"+<br>
"
BEGIN
/r/n"+<br>
"
SUSPEND;
/r/n"+<br>
"
END
/r/n"+<br>
"END;";<br>
<br>
<br>
<br>
static final String updateProc = <br>
<br>
"CREATE PROCEDURE
UPDATE_COUNTRY(
/r/n"+<br>
" OLD_COUNTRY
VARCHAR(15),
/r/n"+<br>
" NEW_COUNTRY
VARCHAR(15),
/r/n"+<br>
" NEW_CURRENCY VARCHAR(20) )
AS
/r/n"+<br>
"BEGIN
/r/n"+<br>
" UPDATE
country
/r/n"+<br>
" SET country =
:NEW_COUNTRY
/r/n"+<br>
" WHERE country =
:OLD_COUNTRY;
/r/n"+<br>
"END;";<br>
<br>
<br>
<br>
static final String insertProc = <br>
<br>
"CREATE PROCEDURE
INSERT_COUNTRY(
/r/n"+<br>
" NEW_COUNTRY
VARCHAR(15),
/r/n"+<br>
" NEW_CURRENCY VARCHAR(20) )
AS
/r/n"+<br>
"BEGIN
/r/n"+<br>
" INSERT INTO country(country,currency)
/r/n"+<br>
" VALUES
(:NEW_COUNTRY,:NEW_CURRENCY); /r/n"+<br>
"END;";<br>
<br>
<br>
static final String deleteProc = <br>
<br>
"CREATE PROCEDURE
DELETE_COUNTRY(
/r/n"+<br>
" OLD_COUNTRY VARCHAR(15) )
AS
/r/n"+<br>
"BEGIN
/r/n"+<br>
" DELETE FROM
country
/r/n"+<br>
" WHERE country =
:OLD_COUNTRY;
/r/n"+<br>
"END;";<br>
} <br>
</p>
</li>
<li>右击工程面板中的<code>ProcSetUp.java</code>文件,然后选择运行。这一步骤在服务器里生成了表和程序。</li>
<li>从菜单选择 File|Close 。</li>
</ol>
<p>这是一个非常简单的程序。建议你在编写更复杂的存储程序时,参考你的数据库文档。</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -