我的单例中有下一个方法来执行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连接方法解决这个问题?
答案 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(;