IAm*_*aja 9 java stored-procedures jdbc
我正在阅读JavaDocsConnection#prepareCall:
sql - 可能包含一个或多个'?'的SQL语句 参数占位符.通常,此语句是使用JDBC调用转义语法指定的.
根据这个流行的mkyong JDBC教程,我看到执行的方法如下:
String insertStoreProc = "{call insertDBUSER(?,?,?,?)}";
callableStatement = dbConnection.prepareCall(insertStoreProc);
Run Code Online (Sandbox Code Playgroud)
我想知道:
{ ... })中?call继续执行程序的名称?最重要的是:是否是{ call <nameOfProcedure> }在所有JDBC驱动程序中执行所有存储过程的正确语法?或者{ call ... }特定于特定类型的驱动程序?
这个过程调用语法有变化吗?例如,是否有场景/驱动器,其中一个可能传递"{ execute <nameOfProcedure> }"到prepareCall方法?有没有关于这方面的文件?
根据CallableStatement,JDBC为所有驱动程序提供了两种有效的语法,用于以标准方式调用proc:
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
Run Code Online (Sandbox Code Playgroud)
和:
{call <procedure-name>[(<arg1>,<arg2>, ...)]}
Run Code Online (Sandbox Code Playgroud)
但是,目前还不清楚何时为使用(即:何时preprend call用?=).
JDBC规范第 13.4 节转义语法定义了许多称为 JDBC 转义的转义。这些转义符包含在花括号中。调用转义的规范是:
\n\n\n\n\n如果数据库支持存储过程,则可以使用 JDBC 转义语法调用它们,如下所示:
\n\nRun Code Online (Sandbox Code Playgroud)\n\n{call <procedure_name> [(<argument-list>)]}\n或者,当过程返回结果参数时:
\n\nRun Code Online (Sandbox Code Playgroud)\n\n{? = call <procedure_name> [(<argument-list>)]}\n方括号表示(参数列表)部分是可选的。输入参数可以是文字或参数标记。有关参数的信息,请参阅第 108 页的 \xe2\x80\x9c 设置参数\xe2\x80\x9d。
\n
这也记录在java.sql.CallableStatement
所以名称call和花括号都是在 JDBC 规范中指定的。
至于你问题的第二部分。JDBC 是一种尝试尽可能独立于数据库的规范,并且通常默认为 SQL 标准来做到这一点。IIRC SQL 规范指定存储过程要么没有返回值,要么只有一个返回值。如果存储过程没有返回值,则使用第一个调用语法。如果存储过程只有一个返回值,则使用第二个。
\n\n存储过程还可以具有OUT参数(不要与结果集混淆),这些参数在普通参数列表中定义。
| 归档时间: |
|
| 查看次数: |
3645 次 |
| 最近记录: |