我正在尝试创建一个框架来显示我数据库中的所有电影名称,然后他们在框架中选择一行来执行另一个查询。我有一个 ResultSet (rs),它接收查询执行的结果以选择电影的名称。之后,我在 SQLTableModel 中使用 rs 来创建 JTable 并显示在我的框架中。该表显示了我数据库中所有电影的名称。一切都很好。但是,当我选择一行时,我使用相同的 rs 接收另一个查询,该查询在我的数据库中选择我在 JTable 中选择的电影的所有信息,但我得到了一些错误。首先,我在 JTable 中选择的行丢失了值(电影的名称)。但是在其他行中没有任何反应。其次,我的控制台在函数“getValueAt”中向我显示了一个来自 SQLTableModel 的错误,提示“错误:ResultSet 关闭后不允许进行#0 操作”。我在 stackoverflow 中搜索了一些解决方案,但没有成功。我做了一些测试。如果我的 ResultSet (rs) 在我在 SQLTableModel 中使用它之前收到多个查询,则一切正常。但是在 SQLTableModel 中使用它之后,如果我再次尝试使用它,就会出现我提到的错误。框架客户端.javapublic class FrameCliente { JFrame frameCliente; JTable table; BancoDeDados bd; ResultSet rs; public FrameCliente() { bd = new BancoDeDados(); frameCliente = new JFrame(); table = new JTable(); rs = bd.listar("SELECT fil_nome Nome FROM filme"); table.setModel(new SQLTableModel(rs)); table.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if(table.getSelectedRowCount() > 0) { rs = bd.listar(" SELECT * FROM filme WHERE fil_nome = '" + table.getValueAt(table.getSelectedRow(), 0) + "'"); } } }); frameCliente.add(new JScrollPane(table)); frameCliente.setTitle("Filmes"); frameCliente.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frameCliente.setSize(800, 300); frameCliente.setLocationRelativeTo(null); frameCliente.setVisible(true); }}
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
始终使用 ArrayList 或 Map 等内存结构来缓存从 DB 获取的结果。由于与数据库的连接很昂贵,因此保持此连接也很昂贵。所以尽可能快地调用 DB,尽可能短。一旦你在内存中获得数据,你就可以随意操作。
添加回答
举报
0/150
提交
取消