【问题标题】:Why am i getting java.sql.SQLException: ORA-01002: fetch out of sequence exception为什么我得到 java.sql.SQLException: ORA-01002: fetch out of sequence 异常
【发布时间】:2013-06-16 05:36:54
【问题描述】:

我在我的 java 代码中运行一个简单的更新语句到一个 oracle 数据库(JDBC 调用),它会在找到记录时更新,但当记录不存在时我得到“java.sql.SQLException: ORA-01002: fetch乱序”异常。这是我的代码,为什么异常?我应该在哪里改进它。代码示例会很有帮助。

public String preformUpdate(String someValue){
    ResultSet rs;
    String result = "Update failed record not found.";
    StringBuffer sb = new StringBuffer();

    try{
        conn = DBConnect.getInstance().dbOracleConnect();   

        StringBuffer sbUpdate = new StringBuffer();
        sbUpdate = new StringBuffer("UPDATE sometable ");
        sbUpdate.append("SET value1 = ? ");
        sbUpdate.append("WHERE value2 = ?" );

        ps = conn.prepareStatement(sbUpdate.toString());  
        ps.setString(1, "0");
        ps.setString(2, someValue);

        rs = ps.executeQuery();

        if (rs.next()){
            result = "Value updated";               
        }

    }
    catch (Exception e){
        e.printStackTrace();
    }
    finally{
        JDBCHelper.close(cs);   
        JDBCHelper.close(conn);         
    }

    return result;
}

【问题讨论】:

  • 我不是 Java 开发人员,但根据我对其他语言的了解,我认为 rs.next() 可能是问题所在,因为更新查询可能不会返回任何结果集,所以next() 失败...
  • 您以前没有用 Java 编写过 SQL 插入代码吗?
  • 我只是在学习,如果这是一个愚蠢的问题,请见谅。

标签: java sql oracle


【解决方案1】:

您应该使用 executeUpdate() 而不是 executeQuery(),因为您没有触发 SELECT。

int numberOfRowsAffected = ps.executeUpdate();

此方法返回数据库中实际更新的行数。

【讨论】:

  • Ravi Thapliyal 这会处理异常,但是当它发现要更新的记录只是挂在该行 int numberOfRowsAffected = ps.executeUpdate();我只更新一条记录。
  • 在程序中挂起不会终止?它会在控制台上抛出任何异常吗?您能否更新您的代码块以增加清晰度?还有,数据库中value1/2 varchar的数据类型是什么?
  • 它只是挂起没有异常并且程序不会终止
  • int numberOfRowsAffected = ps.executeUpdate(); if (numberOfRowsAffected != 0){ result = "记录更新"; }
  • 执行过程中挂起表示该表可能已被锁定,因此您的更新正在等待中。如果可能,重新启动数据库。确保在尝试更新此表时没有其他数据库事务正在使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 2013-08-25
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2022-08-20
相关资源
最近更新 更多