我正在嘗試創建一個框架來顯示我數據庫中的所有電影名稱,然后他們在框架中選擇一行來執行另一個查詢。我有一個 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
提交
取消