1

我的单例中有下一个方法来执行 JDBC 连接

public void openDB() throws ClassNotFoundException, IllegalAccessException,
        InstantiationException, SQLException {
    Class.forName("com.mysql.jdbc.Driver").newInstance();
    String url = "jdbc:mysql://localhost/mbpe_peru";//mydb
    conn = DriverManager.getConnection(url, "root", "admin");
    st = conn.createStatement();
}

public void sendQuery(String query) throws SQLException {
    st.executeUpdate(query);
}

public void closeDB() throws SQLException {
    st.close();
    conn.close();
}

我遇到了一个问题,我必须调用两次。

private void jButton1ActionPerformed(ActionEvent evt) {

Main.getInstance().openDB();
Main.getInstance().sendQuery("call insertEntry('"+EntryID()+"','"+SupplierID()+"');");
Main.getInstance().closeDB();

Main.getInstance().openDB();
for(int i=0;i<dataBox.length;i++){
Main.getInstance().sendQuery("call insertCount('"+EntryID()+"','"+SupplierID()+"','"+BoxID()+"');
Main.getInstance().closeDB();
}
}

我已经尝试保持连接打开并发送 2 个查询,然后关闭它并没有工作......它工作的唯一方法是不使用方法,声明连接的命令并使用不同的变量进行连接和声明。我认为如果我关闭连接和语句,我可以再次使用该变量,因为它是一种方法,但我不能。有没有办法使用我的 JDBC 连接方法来解决这个问题?

4

3 回答 3

1

你的循环是

   Main.getInstance().openDB();
   for(int i=0;i<dataBox.length;i++){
      Main.getInstance().sendQuery(....);
      Main.getInstance().closeDB();
    }

您将在每次迭代时关闭数据库。你应该做

   Main.getInstance().openDB();
   for(int i=0;i<dataBox.length;i++){
      Main.getInstance().sendQuery(....);
    }
    Main.getInstance().closeDB();
于 2012-11-23T23:01:28.177 回答
0

我建议更改您的代码如下:

private void jButton1ActionPerformed(ActionEvent evt) {
    Main.getInstance().openDB();
    Main.getInstance().sendQuery("call insertEntry('"+EntryID()+"','"+SupplierID()+"',);

    for(int i=0;i<dataBox.length;i++){
        Main.getInstance().sendQuery("call insertCount('"+EntryID()+"','"+SupplierID()+"','"+BoxID()+"');
    }

    Main.getInstance().closeDB();
}

我没有测试过这个,所以我希望它有效。

于 2012-11-23T21:50:26.883 回答
0

创建两个语句。并且更好地使用带有 setter 的参数化语句。

Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost/mbpe_peru";//mydb
Connection conn = DriverManager.getConnection(url, "root", "admin");

CallableStatement insertEntrySt = conn.prepareCall("CALL insertEntry(?, ?)");
insertEntrySt.setInt(1, EntryID());
insertEntrySt.setInt(2, SupplierID());
insertEntrySt.executeUpdate();
insertEntrySt.close();

CallableStatement insertCountSt = conn.prepareCall("CALL insertCount(?, ?, ?)");
...

conn.close(;
于 2012-11-23T22:53:36.103 回答