假设我有100个SELECT查询与一个输入不同,可以使用PreparedStatement作为值。
我在Web上看到的所有文档都用于批处理插入/更新/删除,我从未见过用于SELECT语句的批处理。
这能办到吗?如果是,请帮助我当下面的示例代码。
我认为这可以使用“IN”子句来完成,但我更喜欢使用批处理SELECT语句。
样本代码:
public void run(Connection db_conn, List value_list) {
String sql = "SELECT * FROM DATA_TABLE WHERE ATTR = ?";
PreparedStatement pstmt = db_conn.prepareStatement(sql);
for (String value: value_list) {
pstmt.clearParameters();
pstmt.setObject(1, value);
pstmt.addBatch();
}
// What do I call here?
int[] result_array = pstmt.executeBatch()
while (pstmt.getMoreResults()) {
ResultSet result_set = pstmt.getResultSet();
// do work here
}
}
我认为这也可能是依赖于驱动程序的行为,我正在使用它们的JDBC驱动程序编写针对IBMAS/400 DB2数据库的查询。
发布于 2018-04-16 15:25:02
见文件:
此列表可能包含用于更新、插入或删除行的语句;也可能包含DDL语句,如CREATETABLE和DROPTABLE。但是,它不能包含生成ResultSet对象的语句,例如SELECT语句。换句话说,列表只能包含产生更新计数的语句。列表在创建时与语句对象关联,最初为空。可以使用addBatch方法向此列表添加SQL命令。
发布于 2018-04-16 17:04:44
AddBatch()用于‘DELETE’/‘INSERT’/‘UPDATE’语句,而不是‘SELECT’语句。
https://stackoverflow.com/questions/-100008122
复制相似问题