当前位置:  技术问答>java相关

clob存储异常,请大家帮忙看看有什么错误?

    来源: 互联网  发布时间:2015-07-16

    本文导语:  以下代码更新数据库的clob字段,但是运行时总发生如下异常: java.sql.SQLException: ORA-22292: 无法在没有事务处理的情况下以读写模式打开 LOB ORA-06512: 在"SYS.DBMS_LOB", line 599 ORA-06512: 在line 1 代码如下: public static vo...

以下代码更新数据库的clob字段,但是运行时总发生如下异常:
java.sql.SQLException: ORA-22292: 无法在没有事务处理的情况下以读写模式打开 LOB
ORA-06512: 在"SYS.DBMS_LOB", line 599
ORA-06512: 在line 1

代码如下:
public static void setClob(String strSql,String lob_fieldName,String strValue) throws Exception {

    PreparedStatement stmt = null;
    
    OracleCallableStatement cstmt=null;
    
    ResultSet rs =  null;
    
    Writer writer;

DBConnection conn=new DBConnection();

try{

    conn.beginTrans();

stmt = conn.getPreparedStmt(strSql,ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);


    rs =  stmt.executeQuery();
    
    if (rs.next()) {

     try{
    
     CLOB clob =(CLOB) rs.getClob(lob_fieldName);
    
     cstmt=(OracleCallableStatement)(conn.getConnection().prepareCall("BEGIN COMMIT;END;"));
    

     cstmt.execute();
         
     //调用oracle dbms_lob包以读写模式打开CLOB
     cstmt=(OracleCallableStatement)(conn.getConnection().prepareCall("BEGIN DBMS_LOB.OPEN(?,DBMS_LOB.LOB_READWRITE);END;"));
    
     cstmt.setCLOB(1,clob);
    
     cstmt.execute();
    
     //裁减原有lob字段长度为零
     cstmt=(OracleCallableStatement)(conn.getConnection().prepareCall("BEGIN DBMS_LOB.TRIM(?,0);END;"));
    
     cstmt.setCLOB(1,clob);
    
     cstmt.execute();
    
     //关闭CLOB
     cstmt=(OracleCallableStatement)(conn.getConnection().prepareCall("BEGIN DBMS_LOB.CLOSE(?);END;"));
    
     cstmt.setCLOB(1,clob);
    
     cstmt.execute(); 
    
     cstmt=(OracleCallableStatement)(conn.getConnection().prepareCall("BEGIN COMMIT;END;"));
    

     cstmt.execute();
    
     writer=clob.getCharacterOutputStream();
    
     writer.write(strValue);
    
     writer.flush();
    
     writer.close();
    
     conn.commit();
     }
     catch(Exception e) {
    
     conn.rollback();
    
     System.out.println("**错误:存储CLOB对象异常: "+e.getMessage());
    
     throw e;
     }
    }
    else {
    
     conn.rollback();
    }
         
    rs.close();

stmt.close();

conn.close();

}catch(SQLException e){

         System.out.println("**错误:存储CLOB对象异常: "+e.getMessage());
        
         throw e;
    }
}

|
conn.beginTrans();改成
conn.setAutoCommit(true);
在下面这句前加上
conn.beginTrans();
cstmt=(OracleCallableStatement)(conn.getConnection().prepareCall("BEGIN DBMS_LOB.OPEN(?,DBMS_LOB.LOB_READWRITE);END;"));
conn.commit();


|
这是一段关于LOB字段的程序,希望对你有用
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;
import java.io.*;
//import javax.sql.*;


public class blobtest
{
  public static void main(String[] args)
  {
   BLOB bloba;
   Connection con = null;
//   PreparedStatement pstmt = null;
   ResultSet rs;
   String sQueryP = "SELECT TCBlob FROM TeeColor";
  
   try // Attempt to load the JDBC driver 
   {   // with newInstance
       Class.forName( "oracle.jdbc.driver.OracleDriver" ).newInstance();
  }
   catch( Exception e )  // error
{
     System.err.println("Failed to load current driver.");
      return;
   } // end catch
  
   try
   {
     con = DriverManager.getConnection ( "jdbc:oracle:thin:@fzw:1521:orcl",
                                         "oa",
                                         "fcgoamain");
Statement stmt = con.createStatement (); 
                                         
     rs = stmt.executeQuery( sQueryP );
   }
   catch ( Exception e)
   {
     System.err.println( "problems connecting to 1 :" );
    System.err.println( e.getMessage() );

     if( con != null)
     {
       try { con.close(); }
      catch( Exception e2 ) {}
     }

     return;
  } // end catch
  
try
  { 
     //rs = pstmt.executeQuery();
     while( rs.next() )
    {
       System.out.println("select blob");
       bloba =(BLOB)rs.getObject( 1 );
       System.out.println("select blob success");
        byte[] byte_a=new byte[(int)bloba.length()];
InputStream r_stream=bloba.getBinaryStream();
for(int i=0;i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: clob定义及介绍
  • 基于jdbc处理Clob的使用介绍
  • java命名空间java.sql接口clob的类成员方法: length定义及介绍
  • 与Oracle连接时,怎样添加Bolb,Clob字段?急!!!!!
  • java命名空间java.sql接口clob的类成员方法: position定义及介绍
  • @@@@@@@@@@@@@@用Entity Bean怎么操作clob字段?成功就给分!!!
  • java命名空间java.sql接口clob的类成员方法: getasciistream定义及介绍
  • 在Oracle的SQLPLUS下显示CLOB中的内容
  • java命名空间java.sql接口clob的类成员方法: truncate定义及介绍
  • 如何显示BLOB,CLOB类型字段的内容
  • java命名空间java.sql接口clob的类成员方法: getcharacterstream定义及介绍
  • 有关clob的
  • java命名空间java.sql接口clob的类成员方法: setcharacterstream定义及介绍
  • C#操作CLOB大对象的代码一例
  • java命名空间java.sql接口clob的类成员方法: setasciistream定义及介绍
  • 如何在JSP里得到CLOB类型的数据
  • java命名空间java.sql接口clob的类成员方法: setstring定义及介绍
  • 放了两天没人理,真的很难吗?如何显示BLOB,CLOB内容
  • java命名空间java.sql接口clob的类成员方法: getsubstring定义及介绍
  • 用jsp写Oracle里的clob型字段的问题,求救!!!
  • java命名空间java.sql接口clob的类成员方法: free定义及介绍
  • Oracle 插入超4000字节的CLOB字段的处理方法


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3