为什么我的jTable中的值会覆盖第一个值 从jcombobox中选出?有人可以帮我解决这个问题:
private void jButton15ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
Connection con;
Statement stmt;
try {
// TODO add your handling code here
Class.forName("sun.jdbc.odbc.JdbcOdbc");
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, ex);
}
try {
con= DriverManager.getConnection("Jdbc:Odbc:food");
stmt= con.createStatement();
int row = 0;
String st= JcbSub.getSelectedItem().toString();
jTable3.setValueAt(st, row, 0);
row ++;
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}
}
答案 0 :(得分:1)
虽然您确实在最后增加了行号,但您已将其声明为 本地变量 ,它会丢失其值并初始化为0 在每个方法调用。因此,您的第一行每次都会被覆盖。
int row = 0; // move this out to a member variable
String st= JcbSub.getSelectedItem().toString();
jTable3.setValueAt(st, row, 0);
row ++; // this increment currently has no effect on next method call
您每次都要打开一个新的数据库连接,而不是通过调用con.close()
来关闭它。实际上,由于您没有通过Statement
对象stmt执行任何查询,因此不需要方法中的所有JDBC代码。
答案 1 :(得分:1)
JTable#setValue
只会更改现有的行值。
您应该使用TableModel
添加新行。如果您使用DefaultTableModel
,则可以使用addRow
方法
答案 2 :(得分:0)
你的代码是不完整的,因为你没有使用所创建语句的任何内容,并且行不在任何循环中以在任何数据集内传播。
jtable.setValueAt方法需要值,col的索引和行的索引,
setValueAt(Object o,int col,int row)
您只是在将零置于最后一个参数时设置第一行 jTable3.setValueAt(st,row,0);