java - preparedstatement 关闭后有没有办法获取结果集? ( java )

标签 java sql prepared-statement resultset

我创建了一个静态方法来执行下面这样的查询

(这是在 ServerProcess 类中)

public static ResultSet insertRow(Connection conn, String query){
    PreparedStatement pstmt = conn.prepareStatement(query);
    ResultSet rs = pstmt.executeQuery();
    pstmt.close();
    return rs;
}

并尝试从这里获取和使用结果集

ResultSet rs = ServerProcess.insertRow(conn, query)
    while(rs.next()){
    String nameOfEachOne = rs.getString("MEMBER_NAME");
    System.out.println(nameOfEachOne);  
}

但是,据我所知,一旦语句(或准备语句)关闭,结果集必然会作为链式 react 关闭。

我想以某种方式使用它,但我不知道该怎么做。是否有任何可能的方法来获取语句关闭后的信息集?

最佳答案

理想情况下,您永远不会像那样公开 ResultSet,它是一个非常可变/声明的对象。但是,如果您想提供它并仍然关闭它,您可以通过 lambda 函数使用它:

@FunctionalInterface interface SQLConsumer<T> {
    public void accept(T t) throws SQLException; //default functional interfaces can't throw
}

public void query(String sql, SQLConsumer<? super ResultSet> action) {
    ResultSet rs = /* various jdbc code */;
    action.accept(rs);
    rs.close(); //and other resources
}

//In usage:
query("SELECT * FROM my_table", rs -> {
    String s = rs.getString(1); //example
});

当然,你可以像这样制作各种方法,I've actually done abstraction就像我自己在不同 RDBMS 上的个人项目一样。

关于java - preparedstatement 关闭后有没有办法获取结果集? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44469618/

相关文章:

java - 在文本字段中键入时如何列出建议

java - 更新合并 onetomany jpa/hibernate - ConstraintViolationImpl

SQL查询提取每个类别中得票最多的前3条记录

php - 从 mysqli bind_param 捕获警告信息

java - 如何使用 GUI - 使用 PaintComponent() 初始化 GUI,然后添加基于鼠标的 GUI

java - 使用 GUI 和 MySQL 数据库制作程序

sql - 如何查询 Postgres 中的数组存储列,(数组交集)

mysql - 为什么此 SQL 查询不按我的别名排序?

mysql - 使用 sql 转义的动态 mysql 查询是否与准备好的语句一样安全?

mysql - MySQL 循环行的准备语句