.next((在此代码中不起作用。我试了很多,但都白费了。例如,如果我在branch_issuance_g_item_vise(DB表名(中有10行。此代码只打印第一行的10次。
void stockIssuance(String date) throws SQLException{
report_table.setVisible(true);
Statement s = db.conn().createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM branch_issuance_g_item_vise");
DefaultTableModel dt = (DefaultTableModel) report_table.getModel();
dt.setRowCount(0);
Vector v = new Vector();
if(!rs.next()){
m.printError("No Data Found");
rs.beforeFirst();
}
else{
while(rs.next()){
v.add(rs.getString("item_name"));
v.add(rs.getString("qty"));
dt.addRow(v);
}
}
}
甚至,这也不起作用。
void stockIssuance(String date) throws SQLException{
report_table.setVisible(true);
Statement s = db.conn().createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM branch_issuance_g_item_vise");
DefaultTableModel dt = (DefaultTableModel) report_table.getModel();
dt.setRowCount(0);
Vector v = new Vector();
while(rs.next()){
v.add(rs.getString("item_name"));
v.add(rs.getString("qty"));
dt.addRow(v);
}
}
您应该在while循环的开始处停止一个新的向量v。按原样,行将附加到向量,但只有两列。
此外,每次调用rs.next时,结果集都会前进一步。如果结果集为空,最简单的解决方法是删除检查。
在while
之前添加rs.beforeFirst,并在循环内移动VectorArrayList创建
else {
rs.beforeFirst();
while(rs.next()) {
ArrayList v = new ArrayList();
将光标移动到此ResultSet对象的前面,就在第一行之前。如果结果集不包含行,则此方法无效。
您应该使用ArrayList而不是Vector
首先,您应该在else条件之前调用res.beforeFirst()
,因为每次if语句检查条件时,您都在执行rs.next()
,而当您执行else条件时,通过再次执行rs.next()
来跳过第一个元素。
为了解决你的问题,我建议你这样做,而不使用向量:
ResultSet res=stat.executeQuery(query);
while (res.next()){
model.setRowCount(model.getRowCount() + 1);
int currentRow = model.getRowCount() - 1;
model.setValueAt(res.getString("param1"), currentRow, 0);
model.setValueAt(res.getString("param2"), currentRow, 1);
model.setValueAt(res.getString("param3"), currentRow, 2);
model.setValueAt(res.getString("param4"), currentRow, 3);
}
在这个例子中,我使用了一个行计数器,我有4个字段,比如"0";姓名|姓氏|日期|身份证|"这就是为什么你看到0,1,2,3。如果您的表中只有一列,请使用
model.setValueAt(res.getString("something"), currentRow, 0);
如果你一直想使用你的向量,你需要在while循环中每次初始化它:
Vector v;
while(rs.next()){
v=new Vector();
.....
}