java jdbc 不允许任何操作

标签 java jdbc

我得到一个 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)方法),然后关闭 StatementsResultSets 当你完成“某事”时。

关于java jdbc 不允许任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317408/

相关文章:

java - 创建ejb项目时可以生成的 "client ejb"模块的用途是什么?

java - Eclipse插件开发: multipage editor with html extension

java - 为什么从生成的 jar 中找不到 jdbc 驱动程序?

java - 在 Java 中将静态字段设置为 Final

java - 将 XML 文件加载到 ecore 模型中(反序列化)

java - 定位 Digester 中的特定属性 - Java

oracle - oracle DATE 和 TIMESTAMP 的区别

mysql - 插入后获取 UUID() 的值?

java - 我们可以在准备好的语句(PostgreSQL)中使用 DDL 命令吗?

Java - RunnableFuture 和 SortProcessor