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

我已经为此工作了将近一天半,但似乎无法解决此错误。我不知道为什么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;

    }


}

有了这些信息,我可以说这确实有效,我得到了我的信息,但不是游戏中的内容,而是重复出现的内容,就像用户从未从查询中删除一样,因此可以给他们带来无限的回报。如果您需要更多信息,请随时询问。


米琪卡哇伊
浏览 615回答 2
2回答

函数式编程

运行Delete查询时,请使用与查询中相同Statement的Select查询。当您在同一位置重新执行时Statement,前一个ResultSet将关闭。为了避免这种情况,您应该在Statement每次执行查询时创建一个新的。因此,statement = connection.createStatement();从类中的connect()方法中删除,并将MySQLDatabase该类中的所有内容替换statement为connection.createStatement()。您也可以选择statement完全删除私有变量。

犯罪嫌疑人X

当我们对diff使用相同的语句对象时,会发生此错误。类型检查Statement对象
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
MySQL