声明结束后,不允许任何操作

时间:2012-11-23 21:37:48

标签: java mysql sql jdbc database-connection

我的单例中有下一个方法来执行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个查询,然后关闭它并没有工作......唯一的方法是不使用方法,声明连接的命令并使用不同的变量连接和声明。我认为如果我关闭Connecion和声明我可以再次使用变量,因为这是一种方法,但我无法做到。有没有办法使用我的JDBC连接方法解决这个问题?

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();
}

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

答案 2 :(得分: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(;