如何在java中的循环内执行查询

时间:2015-11-16 12:19:47

标签: java mysql

我已经尝试了以下代码来存储数组列表(表)的所有数据。但是没有给出任何错误或所需的输出。

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;
        }
    }
}

我该如何正确处理?

2 个答案:

答案 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
}