簡體   English   中英

JDBC批處理查詢的高性能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM