亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 AbstractTableModel 中使用 ResultSet 后關閉 ResultSet

在 AbstractTableModel 中使用 ResultSet 后關閉 ResultSet

婷婷同學_ 2023-03-09 13:55:42
我正在嘗試創建一個框架來顯示我數據庫中的所有電影名稱,然后他們在框架中選擇一行來執行另一個查詢。我有一個 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,盡可能短。一旦你在內存中獲得數據,你就可以隨意操作。



查看完整回答
反對 回復 2023-03-09
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號