java - 如何在 Java 中保持 ResultSet 打开?

标签 java swing resultset

我正在为创建 JTable 的 java 文件传递​​值。

ResultSet res = np.InvestmentByInvestType(IType);
 String tablename = "Investment By Invest Type";
 int customAmt = np.showCustomizeInvestAmount1(IType);
 CommonTable ct = new CommonTable();
 ct.CommonSearchTable(res, customAmt,tablename);

我在 CommonSearchTable 中创建了一个按钮来使用 ResultSet 导出 JTable 数据。但它显示错误“结果集关闭后不允许操作”。 CommonSearchTable.java 中的一个方法如下:
public void CommonSearchTable( final ResultSet res, int totally, final String tablename) throws SQLException 
{

        JButton exportTable= new JButton ("Export");

        ResultSetMetaData metaData = res.getMetaData();
        // names of columns
        Vector<String> columnNames = new Vector<String>();
        int columnCount = metaData.getColumnCount();

        for (int column = 1; column <= columnCount; column++) 
        {
            columnNames.add(metaData.getColumnName(column));
        }
        // data of the table
        Vector<Vector<String>> data = new Vector<Vector<String>>();
        while (res.next()) 
        {
            Vector<String> vector = new Vector<String>();
            for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) 
            {
                vector.add(res.getString(columnIndex));                     
            }
            data.add(vector);
        }

        model1 = new DefaultTableModel(data, columnNames);
        JTable table = new JTable(model1);
        int rows = table.getRowCount();
        Sorter = new TableRowSorter<DefaultTableModel> (model1);
        table.setRowSorter(Sorter);
        showSearchPages(30, 1);
        table.setModel(model1);
        String showTotal = "Total Amount : Rs."+totally+"/-"; 
        JPanel footer = new JPanel();
        JLabel show = new JLabel(showTotal);
        box1.setBounds(10,30,800,30);           
        show.setBounds(10, 60, 100, 30);
        show.setFont(new Font("Tahoma",Font.BOLD,16));            
        footer.add(box1);
        footer.add(show);
        footer.setPreferredSize(new Dimension(800,100));   
        JPanel holdingPanel = new JPanel(null);  
        JScrollPane sp = new JScrollPane(table); 
        JButton print = new JButton ("Print");
        print.setBounds(10,10,100,30);
        exportTable.setBounds(120,10,100,30);
        sp.setBounds(10,50,780,580);
        holdingPanel.add(print);
        holdingPanel.add(exportTable);
        holdingPanel.add(sp);  
        JFrame f = new JFrame("Search Results");  
        f.getContentPane().add(holdingPanel,BorderLayout.CENTER);  
        f.getContentPane().add(sp.getVerticalScrollBar(),BorderLayout.EAST);  
        f.getContentPane().add(footer,BorderLayout.SOUTH);
        f.setPreferredSize(new Dimension(850,680));
        f.pack();  
        f.setLocationRelativeTo(null);  
        f.dispose();  
        f.setResizable(false);
        f.setIconImage(img.getImage());
        f.setVisible(true);

        exportTable.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent aev)
            {
                try 
                {                         
                     ExportFile ef = new ExportFile();
                     ef.WriteFile(res, tablename);                        
                } 
                catch (SQLException | IOException ex) 
                {
                    Logger.getLogger(CommonTable.class.getName()).log(Level.SEVERE, null, ex);
                }
            }                                
        });

        print.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
               PrinterJob printJob = PrinterJob.getPrinterJob();
               if (printJob.printDialog())
                    try 
                    { 
                      printJob.print();
                    } 
                    catch(PrinterException pe) 
                    {
                    }
            }
        });
}

请给我指路。

最佳答案

正如您在 docs 中所读到的那样对于结果集:

A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.



这意味着您必须在关闭数据库连接之前将结果数据复制到另一个数据结构(如列表、 map 、任何适合您的需要)中。

关于java - 如何在 Java 中保持 ResultSet 打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20658837/

相关文章:

Java - charAt()、equalsIgnoreCase、if 语句测试?

java - 当前生成 MD5 哈希值的方式 (Java 8/9)

java - 通过 jbutton 从 Jframe 返回

mysql - 来自多个 LEFT JOIN 的巨大结果集的替代方案

java - 通过终端启动 PlantUML JAR 失败

java - 如何以编程方式隐藏 View ?

java - 设置 Swing 程序的默认字体

java - JButton ActionListeners 每个循环中的不同变量

sql - 选择没有连接的表时的结果集逻辑?

java - 将 ResultSet 中的特定记录分配给变量