这是什么意思?(java,数据库)
我知道这类似于sql语句,但sql中没有“call”这样的东西 有人能给我解释一下它的意思吗?Java是如何理解它的 编辑:这是什么意思?(java,数据库),java,database,oracle,Java,Database,Oracle,我知道这类似于sql语句,但sql中没有“call”这样的东西 有人能给我解释一下它的意思吗?Java是如何理解它的 编辑: 这看起来像是可以传递给Oracle的SQL 如果是这样,则可以使用此函数调用Oracle函数mailmerge_package.getLetters,该函数返回一个值。该值由JDBC和Db层解析以替换第一个?值,该值可以读入Java变量。Oracle函数接受3个参数(括号中的3个参数)这看起来像是可以传递给Oracle的SQL 如果是这样,则可以使用此函数调用Oracle
这看起来像是可以传递给Oracle的SQL
如果是这样,则可以使用此函数调用Oracle函数mailmerge_package.getLetters,该函数返回一个值。该值由JDBC和Db层解析以替换第一个?值,该值可以读入Java变量。Oracle函数接受3个参数(括号中的3个参数)这看起来像是可以传递给Oracle的SQL
如果是这样,则可以使用此函数调用Oracle函数mailmerge_package.getLetters,该函数返回一个值。该值由JDBC和Db层解析以替换第一个?值,该值可以读入Java变量。Oracle函数接受3个参数(括号中的3个参数)它是对数据库存储过程的调用。但从这段代码中我无法分辨是哪个数据库。它是对数据库存储过程的调用。但是从这段代码中我无法分辨是哪个数据库。
{call}
import oracle.jdbc.driver.OracleTypes;
//omitted code
CallableStatement cs = null;
ResultSet rs = null;
StringBuffer sql = new StringBuffer("{ call ? := mailmerge_package.getLetters(?, ?, ?)}");
try {
cs = conn.prepareCall(sql.toString());
cs.registerOutParameter(1, OracleTypes.CURSOR);
DAOUtils.setLong(cs, 3, checklistAnsMastId);
DAOUtils.setLong(cs, 2, workEntityId);
cs.setLong(4, patientId);
DAOUtils.setLong(cs, 5, encounterId);
cs.setString(6, encounterType);
cs.execute();
rs = (ResultSet)cs.getObject(1);
这是一个很好的例子。基本上,由于不同的数据库对于如何调用用户定义的过程具有不同的语法,并且不同的数据库对于诸如通用日期/时间函数之类的各种事情具有不同的内置函数,因此JDBC驱动程序实现了许多转义序列,驱动程序在其中转换通用规范(即{call}
)并将其扩展为特定于数据库的语法。对于外部联接、日期文字和字符串函数等,还有各种其他转义序列,如果您试图编写与数据库无关的代码,这些转义序列可能会很有用
仅供参考,这些转义序列最初是在ODBC API中定义的,然后被JDBC采用,因此您可能会找到比JDBC更多的与ODBC相关的文档。{call}
这是一个很好的例子。基本上,由于不同的数据库对于如何调用用户定义的过程具有不同的语法,并且不同的数据库对于诸如通用日期/时间函数之类的各种事情具有不同的内置函数,因此JDBC驱动程序实现了许多转义序列,驱动程序在其中转换通用规范(即{call}
)并将其扩展为特定于数据库的语法。对于外部联接、日期文字和字符串函数等,还有各种其他转义序列,如果您试图编写与数据库无关的代码,这些转义序列可能会很有用
仅供参考,这些转义序列最初是在ODBC API中定义的,然后被JDBC采用,因此您可能会找到比JDBC更多的与ODBC相关的文档。我们需要上下文。我们不知道您使用的是什么数据访问技术。@user521180:这不是数据访问技术,而是存储技术。您已经发布了创建StringBuffer的代码,但没有说明如何使用它。我从类中添加了更多代码。看看Oracle SQL中有调用,我们需要上下文。我们不知道您使用的是什么数据访问技术。@user521180:这不是数据访问技术,而是存储技术。您已经发布了创建StringBuffer的代码,但没有说明如何使用它。我从类中添加了更多代码。看看Oracle SQL中有调用
import oracle.jdbc.driver.OracleTypes;
//omitted code
CallableStatement cs = null;
ResultSet rs = null;
StringBuffer sql = new StringBuffer("{ call ? := mailmerge_package.getLetters(?, ?, ?)}");
try {
cs = conn.prepareCall(sql.toString());
cs.registerOutParameter(1, OracleTypes.CURSOR);
DAOUtils.setLong(cs, 3, checklistAnsMastId);
DAOUtils.setLong(cs, 2, workEntityId);
cs.setLong(4, patientId);
DAOUtils.setLong(cs, 5, encounterId);
cs.setString(6, encounterType);
cs.execute();
rs = (ResultSet)cs.getObject(1);
{call <<procedure name>>}