0 0

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

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();
        }
    }
}

程序运行到
rs = stat.executeQuery(sql2);

就会抛出
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)


请大家帮我看下,谢谢。
DAO 
2008年11月20日 15:08

1个答案 按时间排序 按投票排序

0 0

采纳的答案

也许访问数据库的模式是隐式提交的方式,即每一个SQL语句执行时,就自动的Commit,这样就发生这样的错误.改一下就可以了.

conn.setAutoCommit(false);

2008年11月20日 15:41

相关推荐

    ORA-01157解决方案.txt

    ### ORA-01157 错误详解与解决方案 #### 错误代码与含义 ORA-01157 错误是 Oracle 数据库中一个常见的错误代码,其全称是:“ORA-01157: 无法识别/文件 - DBWR 文件”。这个错误通常发生在数据库启动过程中,当...

    oracle实例的内存(SGA和PGA)进行调整,优化数据库性

    - 查看`DB_CACHE_SIZE`参数设置,监控数据块的物理读取率,确保数据缓冲区的使用效率,调整`DB_BLOCK_GETS`和`PHYSICAL_READS`比例,保持高命中率。 - **日志缓冲区(Redo Log Buffer)** - 监测`redoentries`和...

    数据库ORA-01460错误的解决方法

    在IT领域,尤其是在数据库管理与维护中,遇到ORA-01460错误是常见的问题之一,这通常意味着系统在尝试执行数据转换时遇到了未实现或不合理的请求。本文将深入探讨ORA-01460错误的成因、影响以及提供一系列有效的解决...

    oracle数据库的clob大字段在jdbc中的处理方式

    在JDBC中,CLOB对象被表示为`java.sql.Clob`接口的实例,提供了读取和修改CLOB字段的方法。 要读取CLOB字段并转换为String,你需要遵循以下步骤: 1. **建立连接**:使用`DriverManager.getConnection()`方法建立...

    数据库连接利用工具–Sylas

    然而,描述中指出在使用过程中遇到了一些问题,这可能包括错误代码“ORA-24345:出现截断或空读取错误”,这是Oracle数据库系统中一个常见的错误,通常与数据读取或写入过程中的数据长度不匹配有关。 错误的产生...

    wcf连接数据库

    这样,Silverlight应用可以通过调用WCF服务的方法来执行CRUD(创建、读取、更新、删除)操作,而无需直接访问数据库,增加了安全性。 1. **创建WCF服务** - 首先,在Visual Studio中创建一个新的WCF服务项目。这将...

    用Java类来测试Oracle最大连接数的程序

    java.sql.SQLException: Listener refused the connection with the following error: ORA-12518, TNS: listener could not handoff client connection ``` 这个异常意味着Oracle监听器无法将客户端连接分发到后端...

    java 连接oracle

    ### Java连接Oracle数据库并返回数据打印的知识点 #### 一、Java连接Oracle数据库的基本步骤 在Java中连接Oracle数据库通常需要以下步骤: 1. **加载Oracle JDBC驱动:** - 使用`Class.forName()`方法来注册...

    kettle_使用中的一些常见问题.docx

    2008/06/25 13:30:57 - ERROR: java.sql.SQLException: ORA-01722: 无效数字 ``` **原因分析**: 根据错误信息, 可以看出字段 "field2" 的值为 "1,798", 而 Oracle 无法将含有逗号的字符串转换为 Number 类型。 **...

    数据库驱动程序

    Oracle驱动程序通常遵循Java Database Connectivity (JDBC) 标准,这是一个Java API,允许Java程序员使用SQL语句来访问和操作数据库。JDBC驱动分为四种类型:Type 1、Type 2、Type 3 和 Type 4。Oracle提供的驱动...

    JDBC 连接过程(oracle)

    1. **获取JDBC驱动包**:通常情况下,Oracle的JDBC驱动位于安装目录下的`jdbc/lib`文件夹中,例如`C:\oracle\ora92\jdbc\lib\classes12.jar`。 2. **配置Classpath**:将该JAR文件添加到项目的类路径中: - 在...

Global site tag (gtag.js) - Google Analytics