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()
方法的开头创建语句(例如,调用超类方法),然后在完成“某事”后关闭Statements
和ResultSets
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句