为了账号安全,请及时绑定邮箱和手机立即绑定

Java JDBC MySQL异常:“在ResultSet关闭后不允许进行操作”

Java JDBC MySQL异常:“在ResultSet关闭后不允许进行操作”

米琪卡哇伊 2019-11-20 14:28:38
我已经为此工作了将近一天半,但似乎无法解决此错误。我不知道为什么ResultSet被关闭。也许有些人可以帮助我。MySQL数据库:package net.gielinor.network.sql;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public abstract class MySQLDatabase {    private String host;    private String database;    private String username;    private String password;    private Connection connection = null;    private Statement statement;    public MySQLDatabase(String host, String database, String username, String password) {        this.host = host;        this.database = database;        this.username = username;        this.password = password;    }    public abstract void cycle() throws SQLException;    public abstract void ping();    public void connect() {        try {            Class.forName("com.mysql.jdbc.Driver").newInstance();            connection = DriverManager.getConnection(String.format("jdbc:mysql://%s/%s", host, database), username, password);            statement = connection.createStatement();        } catch (Exception e) {            e.printStackTrace();        }    }    public void ping(String table, String variable) {        try {            statement.executeQuery(String.format("SELECT * FROM `%s` WHERE `%s` = 'null'", table, variable));        } catch (Exception e) {            connect();        }    }    public ResultSet query(String query) throws SQLException {        if (query.toLowerCase().startsWith("select")) {            return statement.executeQuery(query);        } else {            statement.executeUpdate(query);        }        return null;    }    public Connection getConnection() {        return connection;    }}有了这些信息,我可以说这确实有效,我得到了我的信息,但不是游戏中的内容,而是重复出现的内容,就像用户从未从查询中删除一样,因此可以给他们带来无限的回报。如果您需要更多信息,请随时询问。
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

运行Delete查询时,请使用与查询中相同Statement的Select查询。当您在同一位置重新执行时Statement,前一个ResultSet将关闭。


为了避免这种情况,您应该在Statement每次执行查询时创建一个新的。因此,statement = connection.createStatement();从类中的connect()方法中删除,并将MySQLDatabase该类中的所有内容替换statement为connection.createStatement()。您也可以选择statement完全删除私有变量。



查看完整回答
反对 回复 2019-11-20
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

当我们对diff使用相同的语句对象时,会发生此错误。类型

检查Statement对象


查看完整回答
反对 回复 2019-11-20
  • 2 回答
  • 0 关注
  • 603 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信