teleport01 2008-11-20 15:08
浏览 870
已采纳

java.sql.SQLException: ORA-01002: 读取违反顺序 大家帮我看看

[code="java"]
public void insertImage(Image image)
{
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
OutputStream out = null;
try
{
conn = DBManager.getConnection();
stat = conn.createStatement();

    byte[] data = convertImage(image);

    String sql1 = "INSERT INTO PHOTO(ID,NAME,IMAGE) VALUES(1,'TEST',EMPTY_BLOB())";
    stat.execute(sql1);

    String sql2 = "SELECT IMAGE FROM PHOTO WHERE ID=1 FOR UPDATE";
    rs = stat.executeQuery(sql2);
    if(rs.next())
    {
        BLOB blob = (BLOB)rs.getBlob("IMAGE");
        out = blob.getBinaryOutputStream();
        try
        {
            out.write(data,0,data.length);
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}
catch(SQLException e)
{
    e.printStackTrace();
}
finally
{
    try
    {
        if(out != null)
            out.close();
        if(rs != null)
            rs.close();
        if(stat != null)
            stat.close();
        if(conn != null)
            conn.close();
    }
    catch(SQLException e)
    {
        e.printStackTrace();
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
}

}
[/code]
程序运行到
[code="java"]rs = stat.executeQuery(sql2);[/code]
就会抛出
[code="java"]
java.sql.SQLException: ORA-01002: 读取违反顺序

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:1198)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2400)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2672)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:572)
at com.computech.takepic.common.ImageDAO.insertImage(ImageDAO.java:39)
at com.computech.takepic.common.TestJMF$1.actionPerformed(TestJMF.java:104)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1766)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

[/code]

请大家帮我看下,谢谢。

  • 写回答

1条回答

  • linpyi 2008-11-20 15:41
    关注

    也许访问数据库的模式是隐式提交的方式,即每一个SQL语句执行时,就自动的Commit,这样就发生这样的错误.改一下就可以了.
    [code="java"]
    conn.setAutoCommit(false);
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据