2015-01-20 37 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