java向oracle数据库Clob读取,写入数据

写入数据

1. 向oracle clob字段创建一个空的 empty_clob()对象。

insert  into PTR_AssetXml(cChr_AssetPlanId,cChr_AssetData,Create_Date,Submitter,Last_Modified_By,Modified_Date,Status,Short_Description,Request_ID) " 
   + "values(?,empty_clob(),?,?,?,?,?,?,(select nextid from arschema where schemaid=3555));

2.查询此条记录并且锁定该记录其它会话不可操作此记录

select cChr_AssetData from PTR_AssetXml where cChr_AssetPlanId=? for update

3.得到该clob字段 的对象并建立输出流 向该对象写入数据

    conn.setAutoCommit(false);

    rs = pre4.executeQuery();

    rs.next();

    clob = (CLOB) rs.getClob(1);

    bw = new BufferedWriter(clob.getCharacterOutputStream());

    bw.write(str.toString());

    if (bw != null) {

     bw.close();

    }

    conn.commit();

读取数据

1 .查询出此字段并获得此clob字段的对象并建立输入流

  1.  try {
       pre1 = daodb.pre(ConstantTool.sqlsearch_3555_blob);
       pre1.setString(1, "PD20140924154");
       rs = pre1.executeQuery();
       CLOB c;
       String str;
       while (rs.next()) {
        c = (oracle.sql.CLOB) rs.getClob(1);
        bf = new BufferedReader(c.getCharacterStream());
        while ((str = bf.readLine()) != null) {
         System.out.println(str);
        }
       }
      } catch (SQLException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (IOException e) {
       e.printStackTrace();
      }

2. 更新数据 应将此clob字段更新为空,然后建立连接 输入数据,如果直接更新数据 会从clob字段里开头的值一一向下覆盖。

注意 clob 对象是 oracle.sql.CLOB;

实际应用的一个写入clob 字段值的一个方法

public void CreateXmlFile(StringBuilder str, String name) {
  file = new File(ConstantTool.filePath + "/" + name + "ws.xml");
  logger.info("开始往路径写入数据.." + file.getAbsolutePath());
  try {
   fos = new FileOutputStream(file);
   osw = new OutputStreamWriter(fos, "UTF-8");
   osw.write(str.toString());
   osw.close();
  } catch (FileNotFoundException e) {
   logger.info(e);
   e.printStackTrace();
  } catch (IOException e) {
   logger.info(e);
   e.printStackTrace();
  }
  // database----------------------------------------------------------
  DAODB db = new DAODB();
  Connection conn = db.conn();
  PreparedStatement pre1;
  PreparedStatement pre2;
  PreparedStatement pre3;
  PreparedStatement pre4;
  PreparedStatement pre5;
  CLOB clob = null;
  ResultSet rs = null;
  BufferedWriter bw;
  int i = 0;
  pre1 = db.pre(ConstantTool.sqlsearch_3555_update_key);
  pre2 = db.pre(ConstantTool.sqlinsertinto_3555);
  pre3 = db.pre(ConstantTool.sqlupdateid_3555);
  pre4 = db.pre(ConstantTool.sqlselect_3555_blob);
  pre5 = db.pre(ConstantTool.sqlsearch_3555_update_clob_empty);
  // public static final String sqlinsertinto_3555 = "insert "
  // +
  // " into PTR_AssetXml(cChr_AssetPlanId,cChr_AssetData,Create_Date,Submitter,Last_Modified_By,Modified_Date,Status,Short_Description,Request_ID) "
  // +
  // "values(?,empty_clob(),?,?,?,?,?,?,(select nextid from arschema where schemaid=3555))";
  String[] planstr = name.split("_");
  try {
   conn.setAutoCommit(false);
   pre1.setLong(1, new Date().getTime() / 1000);
   pre1.setString(2, planstr[0]);
   i = pre1.executeUpdate();
   conn.commit();
   if (i == 0) {
    pre3.executeUpdate();
    conn.commit();
    pre2.setString(1, planstr[0]);
    pre2.setLong(2, (new Date().getTime() / 1000));
    pre2.setString(3, "同步");
    pre2.setString(4, "同步");
    pre2.setLong(5, (new Date().getTime() / 1000));
    pre2.setInt(6, 1);
    pre2.setString(7, "同步");
    pre2.executeUpdate();
    conn.commit();
    pre4.setString(1, planstr[0]);
    conn.setAutoCommit(false);
    rs = pre4.executeQuery();
    rs.next();
    clob = (CLOB) rs.getClob(1);
    bw = new BufferedWriter(clob.getCharacterOutputStream());
    bw.write(str.toString());
    if (bw != null) {
     bw.close();
    }
    conn.commit();
   }
   if (i != 0) {
    pre5.setString(1, planstr[0]);
    pre5.executeUpdate();
    conn.commit();
    pre4.setString(1, planstr[0]);
    conn.setAutoCommit(false);
    rs = pre4.executeQuery();
    rs.next();
    clob = (CLOB) rs.getClob(1);
    bw = new BufferedWriter(clob.getCharacterOutputStream());
    bw.write(str.toString());
    if (bw != null) {
     bw.close();
    }
    conn.commit();
   }
   
   if(pre1!=null){
    pre1.close();
   }
   if(pre2!=null){
    pre1.close();
   }
   if(pre3!=null){
    pre1.close();
   }
   if(pre4!=null){
    pre1.close();
   }
   if(pre5!=null){
    pre1.close();
   }
   db.closeConn();
  } catch (SQLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

实际应用的读取clob值一个方法

public String getPlanInfoByPlanId(String planId) {

  PreparedStatement pre1 = daodb.pre(ConstantTool.sqlsearch_3555_blob);

  ResultSet rs;

  BufferedReader bf;

  StringBuilder sb = new StringBuilder();

  CLOB c;

  String str;

  try {

   pre1.setString(1, planId);

   rs = pre1.executeQuery();

   while (rs.next()) {

    c = (CLOB) rs.getClob(1);

    bf = new BufferedReader(c.getCharacterStream());

    while ((str = bf.readLine()) != null) {

     sb.append(str);

    }

   }

  } catch (SQLException e) {

   logger.info(e);

   e.printStackTrace();

  } catch (IOException e) {

   logger.info(e);

   e.printStackTrace();

  }

  return sb.toString().replaceAll("<", "
\\$\\$").replaceAll
(">", "##");

 }
时间: 2024-12-17 08:58:07

java向oracle数据库Clob读取,写入数据的相关文章

day20 java 语言中的读取写入数据(一)

day20  java 语言中的读取写入数据(一) 一.io概述 io数据流的读写功能,在实际的生活中也很常见,比如文件的上传.下载,日志的自动更新等都与io读写密切相关.io又被分为了读取数据和写入数据两个大的功能.下面就来看看读取数据的几种类. 二.读取数据的几种方式 读取数据被分为了字节流读取数据,和字符流读取数据两种. (一):字符输入流: 1.fileReader类.是字符流读取数据 2.BufferedReader类.带有缓冲流读取数据 (二):字节输入流: 1.FileInputS

day21 java 语言中的读取写入数据(二)

day21  java 语言中的读取写入数据(二) 一.概述: 使用IO流写文件,就体现的是下载的功能.所以说很有必要单独说一下. 二.写入功能:(下载) 写入功能同样也是被分隔为了字符流写入和字节流写入两个方式. (一):字符流写入数据 1.FileWriter类. 2.bufferedwriter类.带缓冲流 (二):字节流写入数据 1.FileOutputStream类. 2.bufferoutputstream类.带有缓冲流 三.具体实例     (一):字符流写入数据 //io数据流输

java 链接Oracle数据库的工具类

java连接Oracle数据库的方式 1 特点:oracle.jdbc.OracleDriver是注册oracle驱动类: jdbc:oracle:thin:@localhost:1521:xe:连接oracle的方式:网络协议+访问方式+IP+端口号+xe数据库: user:hr数据库用户名 Password:hr数据库的用户密码 缺点:statement方式连接数据库容易被黑客注入式攻击 所有不安全 现在企业中很少采用这种方式的了 连接数据库后一定的关闭连接,这个最容易忘记 调用close(

利用PL/SQL从Oracle数据库导出和导入数据

转自:https://www.jb51.net/article/109768.htm 本文实例为大家分享了使用PL/SQL从Oracle数据库导出和导入数据的方法,供大家参考,具体内容如下 1.导出数据: 方式一:工具—>导出用户对象—>导出.sql文件 注:这种方式导出的是建表语句和存储过程语句 方式二:工具—>导出表 注: 这里是导出表的结构和数据 第一种方式导出.dmp格式的文件,.dmp是二进制文件,可跨平台,还能包含权限,效率不错,用的最为广泛. 第二种方式导出.sql格式的文

java连接oracle数据库,关闭连接出现异常:java.sql.SQLRecoverableException: IO Error: Connection reset

java.sql.SQLRecoverableException: IO Error: Connection reset at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:612) at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:5094) at com.sms.send.StartTaskNew.run(SmsSend.java

一个非常标准的Java连接Oracle数据库的示例代码

最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项"库",然后点击"添加外部Jar",选择"D:\Oracle\app\oracle\product\11.2.0\server \jdbc\lib\ojdbc6_g.jar"(注:D:\Oracle为数据库的安装路径). 2.以下代码为非常标准的Oracle数据库连接代码示例: /** * 一个非常标准的连接Oracl

loadjava 把java导入Oracle数据库

1)load jar file loadjava -r -f -verbose -resolve -user xmlbook/xmlbook xmlparserv2.jar  2)load class file loadjava -r -f  -user user_name/password[@URL] oracle/AAA/bbb/CCC.class  3)remove Java classes from the database dropjava -r -f  -user user_name

Java操作Oracle数据库自建工具库

在学习Java操作Oracle数据库的时候,忽然想到这个可不可以像php那样自己建立一个工具类,这样的话可以大大的减小代码的复杂度.也可以提高工作效率. java如果不能自己建立工具类,那是非常可笑的,但是,在建立的过程中,出现了一些问题,希望在以后不要犯类似的错误. 首先,我们在自建工具类之前必然是先模拟测试的,在这个例子当中,其过程如下: 1:引入Oracle的驱动程序 2:建立OracleTools类,并且定义其成员变量. 3:写OracleTools类的成员方法和构造函数. 4:如果全部

向Oracle数据库插入一条数据

这几天搞了一下Oracle数据库,可能用sql server习惯了,感觉好不方便.PL的界面友好度比sql server差远了 ,既然都收购了PL了 为什么不给它做好一点呢?各种不便.郁闷 向Oracle服务器插入一条数据 --不管什么格式通通用''引号引起来.不过INTEGER格式的还是别用引号 insert into T_SITE VALUES( 8, --注意主键别与表里的其他主键冲突了,唯一的 'Cms', 'Cms 网站', 'Cms', 2 , 'CMS', '广告内容管理系统' ,