0

以下代码段从数据库中获取照片的名称:

        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 块执行

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

false

最后一条语句引发异常,即

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

表中只有一个“数据行”与查询匹配,这也可以通过 显示的错误结果可见while.next()。那么为什么上面代码片段中的最后一条语句(stacktrace 这么说)会引发异常?_

4

2 回答 2

0

就在文档中,

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

这说明了一切,您已经通过了行列表,因此您的下一条获取记录的语句抛出错误,

如果没有行,next 将返回 false,如果有行,则返回 true。所以你能检查你的数据库中是否有任何行。

于 2012-05-16T13:58:57.253 回答
0

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

于 2012-05-16T14:00:36.613 回答