当我必须在Java中处理MySQL DB时,我使用MySQL自己开发的驱动程序。使用此库非常容易,但我对性能有疑问。什么"关闭"我每次向DB查询时都应该使用哪种方法?
例如,如果我有一个for循环,这会在DB中生成更多插入,我应该使用什么?
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循环的完整代码:
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 :(得分: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());
}
答案 1 :(得分:0)
永远不要在循环内创建PreparedStatement。 尝试在外面创建声明,你会有很大的改进。