Java 快速修复关闭结果集和PreparedStatements

Java 快速修复关闭结果集和PreparedStatements,java,resultset,Java,Resultset,由于库的使用,我遇到了一些模块接口问题 我必须将Resultset对象从数据库模块中传递出去。正如您可能认为的那样,对于编程来说,它并不是模块化的。所以我做了类似的事情 public ResultSet getEmployee() { PreparedStatement pst = null; ResultSet rs = null; String sql = "select * from employees"; try { pst = conn.Pr

由于库的使用,我遇到了一些模块接口问题

我必须将Resultset对象从数据库模块中传递出去。正如您可能认为的那样,对于编程来说,它并不是模块化的。所以我做了类似的事情

public ResultSet getEmployee()
{
   PreparedStatement pst = null;
   ResultSet rs = null;
   String sql = "select * from employees";
   try
   {
      pst = conn.PreparedStatement(sql);
      rs = pst.executeQuery();
   }
   catch (SQLException e)
   {
    OptionPane.showMessageDialog(null, "Database Access Error");
   }
   return rs;
}
在一些显示模块上,我做到了

tblEmp.setModel(DbUtils.resultsetTableModel(rs))

现在我正在努力完成我的项目,以便交付和交付 突然发现了这个帖子

我意识到我所做的一切都是错的。我必须从数据库模块中传递一个“set”对象。但是正如你所看到的,这个库并不是打算这样使用的。 如何修复该问题以正确关闭所有结果集?
谢谢

我建议您考虑使用
CachedRowSet
而不是
ResultSet
。事实上,您甚至不需要更改方法签名,只需将方法更改为返回
RowSetProvider.newFactory().createCachedRowSet(rs)并在最后一个块中关闭
rs
pst


我不能同意@ElliottFrisch的建议。这只是将GUI与数据库代码混为一谈

我想您可能会发现将其从
ResultSet getEmployee()
更改为
void getEmployee(TableModel tm)
最简单。然后,您可以关闭创建它们的
结果集
语句
对象(这是您应该做的)。谢谢Elliott,您的建议很好,但让我仔细考虑一下。这次我必须小心。一个更解耦的设计可能会返回一个值对象的集合。嗨,Elliott,我回来了。这样,我是否在数据库模块内执行tblEmp.setModel(tm)?但是我不知道如何才能访问JTable对象,我是否最好也将JTable对象传递给数据库模块?看起来非常流畅!让我试试。嗨,当我将返回的对象更改为RowSetFactory.newFactory().createCachedRowSet(rs)时;并导入javax.sql.rowset.RowSetFactory;方法newFactory()是一个未定义的符号编辑,尽管我真的认为您可以自己解决这个问题。您还应该保存
RowSetFactory
对象。我将把它留给你。嗨,EJB,组成一个CachedRowSet成员变量好吗,还是我应该将它设置为局部变量?当然,在创建它的方法和接收它作为返回值的方法中是局部变量。你有什么理由让它持续下去吗?