问题描述
.next()在此代码中不起作用。我尝试了很多,但徒劳无功。例如,如果我在branch_issuance_g_item_vise(数据库表名称)中有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,然后将 Vector ArrayList创建的内容移入循环
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"),1);
model.setValueAt(res.getString("param3"),2);
model.setValueAt(res.getString("param4"),3);
}
在此示例中,我使用行计数器,并且有4个字段,例如“名称|姓|日期| ID |”这就是为什么您看到0、1、2、3。如果表中只有一列,请使用
model.setValueAt(res.getString("something"),0);
如果您一直想使用向量,则需要在while循环中每次都将其初始化:
Vector v;
while(rs.next()){
v=new Vector();
.....
}