在不知道数据类型的情况下将值绑定到PreparedStatement

时间:2013-10-08 15:14:31

标签: java mysql sql oracle jdbc

使用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)正在将数据转换为各自的数据类型并进行设置。

MySQL中的

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 - 生产

1 个答案:

答案 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收集