【问题标题】:SQLException: invalid cursor stateSQLException: 游标状态无效
【发布时间】:2015-12-16 22:07:58
【问题描述】:

为什么我的查询会收到 SQLException

PreparedStatement stmt = con.prepareStatement("SELECT note FROM NOTES4EME WHERE id=?");
stmt.setString(1,"1");
ResultSet a = stmt.executeQuery();
return a.getInt(1);

我错过了什么?

我有一个方法:

public int afficheNote(int id) throws ClassNotFoundException, SQLException {
        Class.forName("org.apache.derby.jdbc.ClientDriver");

        String url = "jdbc:derby://localhost:1527/TLdb;create=true;user=root;password=root";

        Connection con = DriverManager.getConnection(url);

        String query = "SELECT NOTES FROM NOTES4EME WHERE ID = '" + id + "'";

        //PreparedStatement stmt = con.prepareStatement(query);


        PreparedStatement stmt = con.prepareStatement("SELECT note FROM NOTES4EME WHERE id=?");
        stmt.setString(1,"1");
        ResultSet a = stmt.executeQuery();
        if (a.next()) {
        return a.getInt(1);
        }
        return -1;

    }

我在 .JSP 中调用此方法:

<% 
  int a = mybean.afficheNote(1);
%>

【问题讨论】:

  • 异常的完整堆栈跟踪?

标签: java sql jakarta-ee glassfish derby


【解决方案1】:

在调用getInt之前调用next

ResultSet a = stmt.executeQuery();

if (a.next()) {
   return a.getInt(1);
} else {
   throw new IllegalArgumentException("Nothing found for 1...");
}

【讨论】:

  • 我试过了,它给了我这个:org.apache.jasper.JasperException: java.lang.ClassCastException: com.sun.enterprise.naming.impl.JavaURLContext cannot be cast to javax.sql.DataSource
  • 我怀疑这发生在代码的不同部分。使用完整的详细信息更新您的问题...
【解决方案2】:

ResultSet Javadoc 说(部分)最初光标位于第一行之前。所以你需要调用next。添加类似的东西

if (a.next()) {
    return a.getInt(1);
}
return -1;

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多