我希望表从数据库返回数据而不指定行数,我在默认表模型中使用了自动增量,但它不显示所有行,我必须在 Action 监听器之外定义表才能添加它到 JPanel,所以问题是我的表仅从数据库返回一行
int row = 1;
Object [] colnames = {"year","term","balance"};
JTable table4 = new JTable(new DefaultTableModel(colnames,++row));
JScrollPane pane = new JScrollPane(table4);
saachs.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String adm = adms.getText();
int row = 0;
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
try {
throw new Exception ("driver not found");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
String url = "jdbc:mysql://localhost/test";
try {
con = DriverManager.getConnection(url,"abda","abda");
} catch (SQLException e1) {
e1.printStackTrace();
}if(con!=null){
Statement st = null;
ResultSet rs = null;
String query = "select a.year,a.term,a.payable - b.total_paid balance from seet a join ( select adm, extract(year from date) tyear,class, term, sum(paid) total_paid from fees group by adm,class,term) b on a.class = b.class and b.adm = '"+adms.getText()+"' and a.term = b.term and a.year = b.tyear";
try {
st = con.createStatement();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
rs = st.executeQuery(query);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
while(rs.next()){
table4.setValueAt(rs.getString(1),row,0);
table4.setValueAt(rs.getString(2),row,1);
table4.setValueAt(rs.getString(3),row,2);
row++;
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
最佳答案
不要直接使用 setValueAt(...)
设置 JTable 的值方法,而是在您的 actionPerformed(...)
中创建一个 DefaultTableModel 对象方法,并在你的 while (rs.next())
内方法创建一个新的 Vector<String>
您填充 ResultSet 当前行的数据,并在 while 循环结束时,通过调用此 Vector 的 addRow(Vector v)
将此 Vector 传递到您的模型中方法。然后通过调用表的 setModel(TableModel model)
将此模型传递到 JTable 中方法。
类似于:
try {
Object[] columnNames = { "year", "term", "balance" };
DefaultTableModel model = new DefaultTableModel(columnNames, 0);
while (rs.next()) {
Vector<String> rowData = new Vector<>();
rowData.add(rs.getString(1));
rowData.add(rs.getString(2));
rowData.add(rs.getString(3));
row++;
model.addRow(rowData);
}
table4.setModel(model);
} catch (SQLException e1) {
e1.printStackTrace();
}
警告:代码尚未经过测试
关于java - jtable 仅从数据库返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829334/