我已经尝试了以下代码来存储数组列表(表)的所有数据。但是没有给出任何错误或所需的输出。
public class Dbops {
String url = "jdbc:mysql://localhost:3306/ITStuffDB";
String username = "root";
String password = "";
ResultSet rs = null;
public boolean addData(ArrayList<ArrayList<String>> table){
try {
System.out.println(table.size());
for (int i = 0; i < table.size(); i++) {
Connection con1 = (Connection) DriverManager.getConnection(url, username, password);
String query = "INSERT INTO Data (Col1,Col2,Col3) VALUES (?,?,?)";
PreparedStatement pst1 = (PreparedStatement) con1.prepareStatement(query);
pst1.setString(1, table.get(i).get(0));
pst1.setString(2, table.get(i).get(1));
pst1.setString(3, table.get(i).get(2));
pst1.executeUpdate();
pst1.close();
con1.close();
}return true;
} catch (Exception e) {
return false;
}
}
}
我该如何正确处理?
答案 0 :(得分:2)
第一条评论是完全正确的。
调试还可以帮助您跟踪您的程序。您应该尝试调试此方法。
另外,作为建议 - PreparedStatement
的整个想法是编译一次,然后尽可能重用它。我会在循环之外移动语句的创建。
答案 1 :(得分:2)
评论是对的,至少打印例外以了解问题。
此外,每次重新创建连接和语句并不是一个好主意。看看executeBatch()
函数
try {
Connection con1 = (Connection) DriverManager.getConnection(url, username, password);
String query = "INSERT INTO Data (Col1,Col2,Col3) VALUES (?,?,?)";
PreparedStatement pst1 = (PreparedStatement) con1.prepareStatement(query);
for (int i = 0; i < table.size(); i++) {
pst1.clearParameters();
pst1.setString(1, table.get(i).get(0));
pst1.setString(2, table.get(i).get(1));
pst1.setString(3, table.get(i).get(2));
pst1.addBatch();
}
pst1.executeBatch();
return true;
} catch (SQLException e) {
return false;
} finally {
//close everything
}