【问题标题】:set has data of one row but i get an exception when i try to retrieve the dataset 有一行的数据,但是当我尝试检索数据时出现异常
【发布时间】:2012-05-16 13:54:13
【问题描述】:

以下 sn-p 从数据库中获取照片的名称:

        Context context = new InitialContext();
        DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/photog");
        Connection connection = ds.getConnection();
        String sqlQuery = "select nameofthephoto from photocaptions where useremail='" + email + "'";
        PreparedStatement statement = connection.prepareStatement(sqlQuery);
        set = statement.executeQuery();
        if(set == null) {
            System.out.println("set is null !");
        } else if(set != null) {
            System.out.println("set is not null !");
            System.out.println(set.next());
            System.out.println(set.getString("nameofthephoto")); // last statement
          }

else-if 块执行

代码最后2条语句的结果是:

false

最后一条语句抛出异常

java.sql.SQLException: 当前光标位置的操作无效。

表中只有一个“数据行”与查询匹配,while.next() 显示的错误结果也可以看到该“数据行”。那为什么上面sn-p中的最后一条语句(stacktrace这么说)会抛出异常呢?_

【问题讨论】:

  • 不设置任何参数时 pstmt 有什么用
  • @skaffman 你为什么删除你的答案?

标签: java jdbc resultset


【解决方案1】:

直接来自文档,

当调用 next 方法返回 false 时,光标定位 在最后一行之后。 ResultSet 方法的任何调用 需要当前行将导致抛出 SQLException。

这么说,你已经通过了行列表,因此你下一个获取记录的语句抛出错误,

如果没有行,next 将返回 false,如果有行,则返回 true。那么你能检查一下你的数据库中是否有任何行吗?

【讨论】:

    【解决方案2】:

    set.next() 将光标从当前位置向前移动一行并返回 true。但是在您的情况下,结果集中没有数据可以向前移动光标。因此无法执行您想要的操作。

    【讨论】:

    • “但在你的情况下,结果集中没有数据可以向前移动光标。” 你怎么说?
    猜你喜欢
    • 2016-07-08
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多