gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:07:17 25 4
gpt4 key购买 nike

我正在为创建 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com