我尝试使用以下代码添加批量预处理语句:
Connection c = ...
PreparedStatement ps = c.prepareStatement(query1);
ps.setObject(....)
...
ps.addBatch(query2); // SqlException : Unsupported feature
oracle jdbc驱动程序是否支持批处理,或者我做错了什么?
我正在使用oracle瘦驱动程序。来自MANIFEST.MF的版本Implementation-Version: 11.2.0.1.0
。
java.sql.SQLException: Unsupported feature
at oracle.jdbc.driver.OraclePreparedStatement.addBatch(OraclePreparedStatement.java:9803)
at oracle.jdbc.driver.OracleStatementWrapper.addBatch(OracleStatementWrapper.java:285)
at org.jboss.resource.adapter.jdbc.WrappedStatement.addBatch(WrappedStatement.java:731)
at <application classes>
答案 0 :(得分:6)
您正在使用PreparedStatement
创建query1
并将query2
添加到已准备好的不属于您的状态。
如果您使用的是PreparedStatement
,我建议您使用PreparedStatement.addBatch()
方法。
PreparedStatement ps = c.prepareStatement(query1);
ps.setObject(....);
ps.addBatch(); //Voila
答案 1 :(得分:3)
如果您调用PreparedStatement
,CallableStatement
,{{{{}}中的任何一个,则JDBC规范明确要求SQLException
(和execute
)实现抛出executeUpdate
接受查询字符串的1}}或executeQuery
方法。
例如,参见Statement.addBatch(String sql)
上的Javadoc:
<强>抛出:强>
addBatch
- 如果发生数据库访问错误,则在关闭的SQLException
上调用此方法,驱动程序不支持批量更新,在Statement
上调用该方法或{ {1}} 强>
(强调我的)
使用PreparedStatement
,您只能使用CallableStatement
方法,然后使用addBatch()
为准备好的查询批量设置参数值(并为不同的参数值重复该参数值) 。您无法使用普通PreparedStatement
批量处理不同的查询。
使用setXXX
批处理的方式大致如下:
Statement