【发布时间】:2013-10-15 14:36:22
【问题描述】:
使用 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 数据库 11g 快捷版 11.2.0.2.0 版 - 生产
PL/SQL 版本 11.2.0.2.0 - 生产“CORE 11.2.0.2.0 生产”
适用于 32 位 Windows 的 TNS:版本 11.2.0.2.0 - 生产 NLSRTL 版本
11.2.0.2.0 - 生产
【问题讨论】:
-
请包含异常的堆栈跟踪并在您的问题中添加一些格式(例如代码格式)。
-
您确定
bindValue包含 'user01' 吗?当你尝试preparedStatement.setObject(i, 'user01');时会发生什么? -
@Mark Rotteveel :从现在开始肯定会这样做,感谢格式化。
-
@A.B.Cade 是的,变量 bindValue 的值为 'user01'。
-
你看过
getParameterMetaData(),它应该可以帮助你决定类型(特别是getParameterType())
标签: java mysql sql oracle jdbc