我正在尝试创建一个框架来显示我数据库中的所有电影名称,然后他们在框架中选择一行来执行另一个查询。
我有一个 ResultSet (rs),它接收查询执行的结果以选择电影的名称。之后,我在 SQLTableModel 中使用 rs 来创建 JTable 并显示在我的框架中。该表显示了我数据库中所有电影的名称。一切都很好。
但是,当我选择一行时,我使用相同的 rs 接收另一个查询,该查询在我的数据库中选择我在 JTable 中选择的电影的所有信息,但我得到了一些错误。
首先,我在 JTable 中选择的行丢失了值(电影的名称)。但是在其他行中没有任何反应。其次,我的控制台在函数“getValueAt”中向我显示了一个来自 SQLTableModel 的错误,提示“错误:ResultSet 关闭后不允许进行#0 操作”。
我在 stackoverflow 中搜索了一些解决方案,但没有成功。
我做了一些测试。如果我的 ResultSet (rs) 在我在 SQLTableModel 中使用它之前收到多个查询,则一切正常。但是在 SQLTableModel 中使用它之后,如果我再次尝试使用它,就会出现我提到的错误。
框架客户端.java
public 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);
}
}
千巷猫影
相关分类