java - SQLException : ResultSet closed

标签 java hikaricp

我正在尝试执行方法,该方法应该使用数据库中的字段创建一个新对象,每次运行此代码时都会收到 SQLException: ResultSet closeed。

 public DatabasedClient getDatabaseClient(int clientDatabaseid){
    if(DatabaseClientUtil.isInDatabase(clientDatabaseid)){
        return DatabaseClientUtil.getDBClient(clientDatabaseid);
    }else{
        try{
            System.out.println("Trying to find user in db");
            ResultSet rs = fbot.getStorage().query("select * from database_name where clientDBId = " + clientDatabaseid);
            System.out.println("deb " + rs.getString("nick"));
            while (rs.next()) {
                DatabasedClient databasedClient = new DatabasedClient(clientDatabaseid);
                databasedClient.setUid(rs.getString("uid"));
                databasedClient.setNick(rs.getString("nick"));
                databasedClient.setLastConnect(rs.getLong("lastConnected"));
                databasedClient.setLastDisconnect(rs.getLong("lastDisconnect"));
                databasedClient.setTimeSpent(rs.getLong("timeSpent"));
                databasedClient.setLongestConnection(rs.getLong("longestConnection"));
                return databasedClient;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return null;
}

}

我使用 hikari,这里是 AbstractStorage 类的方法

@Override
public void execute(String query) throws SQLException {
    try (Connection connection = getConnection()){
        connection.prepareStatement(query).executeUpdate();
    }
}

@Override
public ResultSet query(String query) throws SQLException {
    try (Connection connection = getConnection()) {
        return  connection.prepareStatement(query).executeQuery();
    }
}

错误截图 enter image description here

我希望有人能帮助我。

最佳答案

我认为您看到的确切错误是由以下代码行引起的:

System.out.println("deb " + rs.getString("nick"));

在将光标移至第一条记录之前,您正尝试访问结果集。此外,您的方法 getDatabaseClient 返回一个对象,该对象在概念上映射到查询中的单个预期记录。因此,对结果集进行一次迭代似乎是有意义的。考虑到所有这些,我们可以尝试以下操作:

try {
    System.out.println("Trying to find user in db");
    ResultSet rs = fbot.getStorage().query("select * from database_name where clientDBId = " + clientDatabaseid);
    // do not access the result set here

    if (rs.next()) {
        DatabasedClient databasedClient = new DatabasedClient(clientDatabaseid);
        databasedClient.setUid(rs.getString("uid"));
        databasedClient.setNick(rs.getString("nick"));
        databasedClient.setLastConnect(rs.getLong("lastConnected"));             
        databasedClient.setLastDisconnect(rs.getLong("lastDisconnect"));
        databasedClient.setTimeSpent(rs.getLong("timeSpent"));
        databasedClient.setLongestConnection(rs.getLong("longestConnection"));
        return databasedClient;
    }
} catch (SQLException e) {
     e.printStackTrace();
}

关于java - SQLException : ResultSet closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47346153/

相关文章:

java - 如何在Alfresco中设置输出文件名?

Java输出高于或等于平均分的个数

java - 既然作者已经写了ProxyConnection,为什么要通过javaassist生成HikariProxyConnection呢?

java - 无可用连接时的 HikariCP 行为

java - 这个类从数据库池获取连接有什么问题

java - 根据条件将测试标记为忽略

java - 多线程和图形

java - 如何使用 Hibernate、HikariCP 和 persistence.xml 实现 Spring 的 @Transactional Annotation

java - 在 Java 中创建 JDBC 连接池

java - androidfragment - 如何膨胀布局然后制作UI功能