我得到一个 No operations allowed after statement closed.
- 非常明显而且不言自明
至于我的代码发生了什么。无论如何,我想知道如何以更简洁的方式做到这一点
public class BaseClass {
Connection con;
Statement st;
protected void establishDBConnection() throws ClassNotFoundException,
SQLException {
Class.forName("com.mysql.jdbc.Driver");
String cString = "....";
con = DriverManager.getConnection(cString, user, password);
st = con.createStatement();
}
public BaseClass() {
try {
createDBConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public ClassB extends BaseClass {
public ClassB() {
super();
}
public void doSomething() {
try {
String q = "select * from my_table";
String moreQuery = "update my_table ...."
String anotherQuery = "do something fancy..."
rs = st.executeQuery(q);
while (rs.next()) {
st.executeUpdate(moreQuery);
st.executeUpdate(anotherQuery);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error in getAllAssociatesOfMra: " + e);
}
}
}
目前我的代码抛出一个 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed.
关于正在发生的事情,异常是显而易见的,但我想知道如何处理 BaseClass 中的关闭。
更新
我知道有几个与我类似的相关问题。这些问题的唯一问题是一切都在主类中完成。将此视为一种设计/抽象问题
最佳答案
你的设计不好。您应该获取连接,最好是从连接池获取连接,在 doSomething()
方法的开头创建语句(例如调用父类(super class)方法),然后关闭 Statements
和 ResultSets
当你完成“某事”时。
关于java jdbc 不允许任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317408/