2015-01-20 43 views
1

當我必須使用Java處理MySQL DB時,我使用由MySQL自己開發的驅動程序。使用這個庫很容易,但我有一個關於性能的問題。每次查詢數據庫時,應該使用什麼「關閉」方法?使用MySQL連接器改進查詢Java

如果例如我有一個for循環,這使得在數據庫中插入更多,我應該使用什麼?

private void invioInsert(String query){ 
    try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    } catch (Exception E) { 
     System.err.println("Non trovo il driver da caricare."); 
     E.printStackTrace(); 
    } 
    try { 
     PreparedStatement statement = conn.prepareStatement(query); 
     statement.execute(); 
     statement.close(); 

    } catch (SQLException E) { 
     System.out.println("SQLException: " + E.getMessage()); 
     System.out.println("SQLState:  " + E.getSQLState()); 
     System.out.println("VendorError: " + E.getErrorCode()); 
    } 
} 

例如for循環可以是:

for(int i=0; i<=10, i++){ 
    String query = "INSERT TABLE VALUES ("+i+")"; 
    sendQuery(query); 
} 

因此,這是的完整代碼循環:

for (int i = 0; i < file.getList().size(); i++) { 
     StringTokenizer tokenizer = new StringTokenizer(file.getList().get(i).replace("\"", "")); 
     String ID = tokenizer.nextToken("|"); 
     int j = 0; 
     while(j<5){ 
      tokenizer.nextToken("|"); 
      j++; 
     } 
     String voto = tokenizer.nextToken("|"); 
     String query = "Insert RisultatiGiocatori values ('"+giornata+"','"+ID+"','"+voto+"')"; 
     invioInsert(query); 
    } 
+0

你想做準備好的語句或只是一個簡單的插入?我無法從你的代碼中知道,因爲你指的是兩者。 – 2015-01-20 19:57:26

+0

我已經插入了我使用的完整代碼(所以for循環)。 – 2015-01-20 20:12:41

回答

1

這是一個典型的用例用於PreparedStatement與批處理執行:

String query = "INSERT TABLE VALUES (?)"; 
try { 
    PreparedStatement statement = conn.prepareStatement(query); 
    for(int i=0; i<=10, i++){ 
     statement.setInt(1, i); 
     statement.addBatch(); 
    } 
    statement.executeBatch(); 
    statement.close(); 

} catch (SQLException E) { 
    System.out.println("SQLException: " + E.getMessage()); 
    System.out.println("SQLState:  " + E.getSQLState()); 
    System.out.println("VendorError: " + E.getErrorCode()); 
} 
0

永遠不要在循環內創建PreparedStatement。 試着在外面創建聲明,你會有很大的改進。

+0

這是一條評論,而不是答案。 – Victor 2015-01-20 20:12:21