[英]JDBC batch query for high performance
我想做批處理查詢DB以獲得高性能,例如sql根據不同的customer_id進行查詢:
select order_id,
cost
from customer c
join order o using(id)
where c.id = ...
order by
我不知道如何使用JDBC語句來完成它。 我知道我可以使用存儲過程來實現這個目的,但是如果我可以在Java應用程序而不是SP中編寫sql,那就更好了。
我正在使用DBCP作為我的Java客戶端和MySQL DB。
JDBC Specification 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();
}
產量
select jedi_name from jedi where id in(?,?,?,?)
Luke, Obiwan, Yoda, Mace Windu
你有沒有理由認為你需要像批量選擇語句這樣的東西?
你的SQL語句是什么並不重要(你可以使用盡可能多的嵌套連接,因為你的數據庫可以處理)。 下面是基本的Java示例(不是DBCP)。 對於非常相似的DBCP示例,您可以查看他們的示例 。
Connection connect = DriverManager.getConnection(YOUR_CONNECTION_STRING);
// Statements allow to issue SQL queries to the database
Statement statement = connect.createStatement();
ResultSet resultSet = statement.executeQuery("select order_id, cost
from customer c
join order o using(id)
where c.id = ...
order by");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.