使用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)
工作正常,没有任何问题。
使用Oracle时只有问题。
我正在使用的Oracle数据库版本是:
Oracle Database 11g快捷版11.2.0.2.0版 - 生产
PL / SQL版本11.2.0.2.0 - 生产“核心11.2.0.2.0生产”
适用于32位Windows的TNS:版本11.2.0.2.0 - 生产NLSRTL版本
11.2.0.2.0 - 生产
答案 0 :(得分:0)
我不知道确切的答案,但......
方法setObject(index,Object)可用于通过使用特定于驱动程序的Java类型传递特定于数据库的抽象数据类型。如果对象是实现接口SQLData的类,则JDBC驱动程序应调用SQLData.writeSQL方法将其写入SQL数据流。另一方面,如果对象是实现Ref,Blob,Clob,NClob,Struct,java.net.URL,RowId,SQLXML或Array的类,则驱动程序应将其作为相应值传递给数据库SQL类型。 ---从Java Docs收集