java - 为什么从方法返回时我的 ResultSet 变空?

标签 java mysql jdbc

我已将查询部分放在一个单独的函数中,该函数在一个地方处理 try、catch 和连接。最近我开始看到返回的结果集为空,但在方法内它不为空。这是传递结果集的不正确方式吗?

public synchronized ResultSet executeQry(String query) {
    try {
        Connection conn = DriverManager.getConnection(myUrl, user, pass);
        Class.forName(myDriver);
        Statement st = conn.prepareStatement(query);
        System.out.println("executing query: " + query);
        ResultSet rs = st.executeQuery(query);
        System.out.println("result set is empty?" + resultSetEmpty(rs));
        return rs;
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

我像这样调用这个方法

ResultSet tableDataRS =executeQry("SELECT * FROM dummy_table"); System.out.println("tableData为空?:"+resultSetEmpty(tableDataRS));

运行时,日志显示在executeQry中结果集不为空,但返回后结果集为空

执行查询:SELECT * FROM dummy_table 结果集为空? false tableDataRS 为空? :true

最佳答案

感谢评论,我发现了问题。我将光标从结果集内容开始之前移动,以检查方法“resultSetEmpty()”中它是否为空,因此当我后来实际尝试使用它时,它已经指向结束所以没有内容可以使用。可以通过将“beforeFirst()”添加到结果集中来修复此问题。这是使用方法调用编辑的方法,将光标移动到第一条记录之前。

public Boolean resultSetEmpty(ResultSet rs) {
    boolean isEmpty = true;
    try {
        while (rs.next()) {
            isEmpty = false;
            rs.beforeFirst();
            break;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return isEmpty;
}

关于java - 为什么从方法返回时我的 ResultSet 变空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47124901/

相关文章:

java - 准备好的语句和结果集 - Java 空指针异常

java - spring-data-rest 集成测试因简单的 json 请求而失败

java - Android - 在没有 EditText 的情况下显示数字键盘

PHP 从 MySQL 表中选择最大的 `id` 值

java - Jaybird CallableStatement 在获取输出参数之前不执行

Java Swing : Action Event to submit multiple variables

java - 从 float 中恢复原始数字

php - Laravel、homestead VM phpmyadmin 安装

mysql - SQLite/MySQL 仅在行的时间戳较新时才替换

java ubuntu 中的 java.lang.ClassNotFoundException