2015-01-20 2 views
1

Java에서 MySQL DB를 처리해야 할 때 MySQL 자체에서 개발 한 드라이버를 사용합니다. 이 라이브러리로 작업하는 것은 매우 쉽지만 성능에 대한 질문이 있습니다. DB에 질의 할 때마다 어떤 "닫는"방법을 사용해야합니까?MySQL 커넥터를 사용하여 쿼리 개선 Java

예를 들어 DB에 삽입을 많이하는 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 < 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

준비된 문장이나 간단한 문장을 삽입하려고합니까? 나는 둘 다 언급했기 때문에 코드에서 알 수 없다. –

+0

내가 사용하는 전체 코드를 삽입했습니다 (for 루프). –

답변

1

이 배치 실행과 PreparedStatement에 대한 고전적인 쓰임새입니다 :

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

그래서이의 전체 코드 루프 :

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