我创建了一个静态方法来执行下面这样的查询
(这是在 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/