4

使用 setObject(index,object) 将值绑定到preparedstatement 使用MySQL 可以正常工作,但不能使用Oracle。

preparedStatement.setObject(i, bindValue);

下面是附加绑定变量后构建的查询。

select ACC_NO from ACC_TABLE where ACC_NAME='java.lang.String';

它正在尝试转换为java.lang.String类型,这会导致以下异常:

java.sql.SQLException:无法执行 sql 命令 - 原始消息:null

而我的 ACC_NAME 是“user01”。

所以实际上查询应该是这样的,

select ACC_NO from ACC_TABLE where ACC_NAME='user01';

所以,如果我的理解没有错的话,preparedStatement.setObject(index, object)就是将数据转换为其各自的数据类型并进行设置。

preparedStatement.setObject(index, object)在 MySQL 中运行良好,没有任何问题。

唯一的问题是在使用 Oracle 时。

我正在使用的 Oracle DB 版本是:

Oracle Database 11g Express Edition 版本 11.2.0.2.0 - 生产PL/SQL 版本 11.2.0.2.0 - 用于 32 位 Windows 的
生产“CORE 11.2.0.2.0 生产” TNS:版本 11.2.0.2.0 - 生产 NLSRTL 版本 11.2.0.2.0 - 生产

4

1 回答 1

0

I don't know the exact answer but...

The method setObject(index, Object) may be used to pass datatabase- specific abstract data types, by using a driver-specific Java type. If the object is of a class implementing the interface SQLData, the JDBC driver should call the method SQLData.writeSQL to write it to the SQL data stream. If, on the other hand, the object is of a class implementing Ref, Blob, Clob, NClob, Struct, java.net.URL, RowId, SQLXML or Array, the driver should pass it to the database as a value of the corresponding SQL type. --- Collected from Java Docs

于 2013-10-10T09:02:49.133 回答