rs.next()没有返回表的第一个值

时间:2013-11-27 00:45:46

标签: java mysql arraylist jdbc-odbc

如果我正在运行以下代码片段,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日

2 个答案:

答案 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. 而且您需要向您添加订单。