Java对Oracle中Clob类型数据的读取和写入详解数据库

Java对Oracle中Clob类型数据的读取和写入详解数据库

Java对Oracle中Clob数据类型是不能够直接插入的,但是可以通过流的形式对clob类型数据写入或者读取,网上代码并不算特别多,讲的也不是很清楚,我对网上资料进行了整理和总结,具体看代码:

写入clob数据

import java.io.Writer;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class TestClobIn {

  public static void main(String args[]){

  String data=”this is a long passage”;

  Writer outStream = null;

 //通过JDBC获得数据库连接

  try {

      Class.forName(“oracle.jdbc.driver.OracleDriver”);

      Connection con = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:ewins”, “scott”, “tiger”);

      con.setAutoCommit(false);

      Statement st = con.createStatement();

      //插入一个空对象empty_clob(),这个是必须的

      st.executeUpdate(“insert into TESTCLOB(ID, NAME, CLOBATTR)values(2,’thename’, empty_clob())”);

      //锁定数据行进行更新,注意“for update”语句,这里不用for update锁定不可以插入clob

      ResultSet rs = st.executeQuery(“select CLOBATTR from TESTCLOB where ID=1 for update”);

      if (rs.next()){

          //得到java.sql.Clob对象后强制转换为oracle.sql.CLOB

          oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob(“CLOBATTR”);

          outStream = clob.getCharacterOutputStream();

          //data是传入的字符串,定义:String data

          char[] c = data.toCharArray();

          outStream.write(c, 0, c.length);

      }

          outStream.flush();

          outStream.close();

          con.commit();

          con.close();

      } catch (Exception e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

      }

  }

}

读取clob数据

import java.io.InputStream;

import java.io.Reader;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

public class TestClobOut {

  public static void main(String args[]){

  String data;

  Reader inStream=null;

  //获得数据库连接

  Connection con = ConnectionFactory.getConnection();//ConnectionFactory类是另外定义的,不必纠结

  con.setAutoCommit(false);

  Statement st = con.createStatement();

  //不需要“for update”

  ResultSet rs = st.executeQuery(“select CLOBATTR from TESTCLOB where ID=1”);

  if (rs.next()){

      java.sql.Clob clob = rs.getClob(“CLOBATTR”);

      inStream = clob.getCharacterStream();

      char[] c = new char[(int) clob.length()];

      inStream.read(c);

      //data是读出并需要返回的数据,类型是String

      data = new String(c);

      inStream.close();

  }

  inStream.close();

  con.commit();

  con.close();

  }

}

对比我们可以看出,无论出库入库,都要对clob数据类型进行查询操作,写入clob数据相对来说更复杂一点,需要先插入empty_clob() 值,然后使用带“for update”的查询语句锁定更新行,最后实例化输出流并对clob类型字段数据进行写入操作;读取clob相对轻松一些,利用 getCharacterStream方法得到输入流,从数据库中clob字段下,直接将数据读取出来。

Java对Oracle中Clob类型数据的读取和写入详解数据库

转载请注明来源网站:blog.ytso.com谢谢!

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/4533.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论