sup*_*che 8 java mysql sql jdbc batch-file
我想做批处理查询DB以获得高性能,例如sql根据不同的customer_id进行查询:
select order_id,
cost
from customer c
join order o using(id)
where c.id = ...
order by
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用JDBC语句来完成它.我知道我可以使用存储过程来实现这个目的,但是如果我可以在Java应用程序而不是SP中编写sql,那就更好了.
我正在使用DBCP作为我的Java客户端和MySQL DB.
Edw*_*rzo 10
在JDBC 4.0规范描述了批量更新的机制.因此,JDBC中的批处理功能可用于插入或更新目的.这在说明书的第14章中描述.
AFAIK没有选择批处理的机制,可能是因为没有明显的需要,因为正如其他人所建议的那样,您可以通过正确构建查询来简单地检索所需的所有行.
int[] ids = { 1, 2, 3, 4 };
StringBuilder sql = new StringBuilder();
sql.append("select jedi_name from jedi where id in(");
for (int i = 0; i < ids.length; i++) {
sql.append("?");
if(i+1 < ids.length){
sql.append(",");
}
}
sql.append(")");
System.out.println(sql.toString());
try (Connection con = DriverManager.getConnection(...)) {
PreparedStatement stm = con.prepareStatement(sql.toString());
for(int i=0; i < ids.length; i++){
stm.setInt(i+1, ids[i]);
}
ResultSet rs = stm.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("jedi_name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
产量
select jedi_name from jedi where id in(?,?,?,?)
Luke, Obiwan, Yoda, Mace Windu
Run Code Online (Sandbox Code Playgroud)
你有没有理由认为你需要像批量选择语句这样的东西?
| 归档时间: |
|
| 查看次数: |
22647 次 |
| 最近记录: |