【问题标题】:JDBC's Resultset is giving me the first row of the query twice. Why?JDBC 的结果集给了我两次查询的第一行。为什么?
【发布时间】:2020-09-26 08:21:01
【问题描述】:

所以,这是代码:

 ...
 try (Connection conn = DriverManager.getConnection(db_file);
             Statement stmt = conn.createStatement()) {
  ResultSet rs = null;
  rs = stmt.executeQuery("select order_id from orders where user_id=" + user_id + ";");
  if (!rs.isBeforeFirst() ) {
   System.out.println("no orders");
  } else {
     do {
      System.out.println(rs.getString("order_id"));
     } while (rs.next());
  }
 } catch (SQLException e) {
            System.out.println(e.getMessage());
 }
 ...

我尝试在 sqlite db 上手动执行查询,这没关系,但是这段代码给了我所有结果,但第一个结果两次。谁能帮我找出问题所在?

例如,如果 db 有来自该 user_id 的 3 个订单,则返回:

first
first
second
third

为什么会这样?

【问题讨论】:

  • 试试while (rs.next()) {System.out.println(rs.getString("order_id"));}
  • 在尝试访问结果集中的记录之前,您应该始终调用rs.next()。这会将光标前进到下一条记录。至于为什么没有rs.next()可以访问第一条记录,我不知道为什么,但你不应该使用这种模式。
  • 在调用rs.next() 之前尝试调用rs.getString() 应该会引发异常。这表明您的 JDBC 驱动程序中存在错误。

标签: java sqlite jdbc resultset


【解决方案1】:

谢谢大家,这就是问题所在。 我只是将其更改为:

 ...
 try (Connection conn = DriverManager.getConnection(db_file);
             Statement stmt = conn.createStatement()) {
  ResultSet rs = null;
  rs = stmt.executeQuery("select order_id from orders where user_id=" + user_id + ";");
  if (!rs.next()) {
   System.out.println("no orders");
  } else {
     do {
      System.out.println(rs.getString("order_id"));
     } while (rs.next());
  }
 } catch (SQLException e) {
            System.out.println(e.getMessage());
 }
 ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 2011-07-27
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    相关资源
    最近更新 更多