如果我正在运行以下代码片段,rs.next应返回从表的第一行开始的值,而不是从第二行返回值。
String val = "select bl.book_id,bl.branch_id, bl.card_no,bl.date_out, bl.due_date ,concat(b.fname,' ',b.lname) as borrower from book_loans bl inner join borrower b on bl.card_no=b.card_no where bl.book_id like '%"+lm.getBook_id()+"%' and bl.card_no like '%"+lm.getCard()+"%'";
rs=st.executeQuery(val);
if(rs.next())
{
for(int a=0;rs.next();a++)
{
System.out.println("hello# "+a);
lm.book_ids.add(rs.getString(1));
lm.branch_id.add(rs.getInt(2));
lm.cards.add(rs.getString(3));
lm.date_out.add(rs.getString(4));
lm.due_date.add(rs.getString(5));
}
for(int a=0;a<lm.branch_id.size();a++)
{
System.out.println(lm.book_ids.get(a));
System.out.println(lm.branch_id.get(a));
System.out.println(lm.cards.get(a));
System.out.println(lm.date_out.get(a));
System.out.println(lm.due_date.get(a));
}
return 1;
}
return 2;
我正在MySQL中运行确切的查询,并且它给出了正确的值,但它不在此代码中。它在sql中显示
72127317 1 9009 2013-11-25 2013-12-09
72127317 3 9009 2013-11-25 2013-12-09
并且在这里重新调整如下
你好#0 72127317 3 9009 2013年11月25日 2013年12月9日
答案 0 :(得分:2)
我相信你的问题就在这里
if(rs.next()) // get the first record
{
for(int a=0;rs.next();a++) // get the second (and later) records....
您可以使用这样的do while
循环 -
int a = 0;
do
{
System.out.println("hello# "+a);
lm.book_ids.add(rs.getString(1));
lm.branch_id.add(rs.getInt(2));
lm.cards.add(rs.getString(3));
lm.date_out.add(rs.getString(4));
lm.due_date.add(rs.getString(5));
a++;
} while (rs.next());
答案 1 :(得分:0)
我认为您的问题也适用于for子句。 你可以尝试
int a = 0;
while (rs.next()){
System.out.println("hello# "+a);
lm.book_ids.add(rs.getString(1));
lm.branch_id.add(rs.getInt(2));
lm.cards.add(rs.getString(3));
lm.date_out.add(rs.getString(4));
lm.due_date.add(rs.getString(5));
a++;
}
do ... while子句可能导致nullPoint异常。ResultSet cursor is initially positioned before the first row. 而且您需要向您添加订单。