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

原创 2013年06月21日 18:04:19

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字段下,直接将数据读取出来。

相关文章推荐

ORA-02143: invalid STORAGE option --DSG oracle 11g 复制数据到oracle 10g

ORA-02143: invalid STORAGE option ORA-02143: invalid STORAGE option SQL: alter table "user"."table...
  • naguang
  • naguang
  • 2012年10月17日 02:36
  • 2832

在oracle中通过字段信息生成xml文件

       一般地,在开发xmlp的时候,我们要先用report builder制作rdf模板,然后上传rdf到客户化应用下的reports文件夹下,通过并发请求,输出xml数据,然后保存成xml文...

在java + oracle环境下,对于clob类型的数据的插入

SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列值。默认情况下,驱动程...

java存取oracle大数据clob类型

java对oracle的clob大数据类型存取

Java JDBC读取大文本类型数据(CLOB)

Java JDBC读取大文本类型数据(CLOB) 开发中我们常常要把一些大文本类型数据存入数据库,例如一片文章这是后我们就需要数据库的CLOB类型来存储了。   一、建立数据库表 此不省略,因...

Java中读取和写入Oracle(CLOB)

Java中读取和写入Oracle(CLOB) oracle中最常用的varcher2类型最多只能存储4000个字节的内容,一般情况下是能够满足用户的需求的。但是在一些特殊情况下(如要存储图片 或者要...

Mybatis之Oracle增删查改示例(含Date、Clob数据类型操作)

oracle表结构 create table T_USERS ( ID NUMBER not null, NAME VARCHAR2(30), SEX VARCH...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java对Oracle中Clob类型数据的读取和写入
举报原因:
原因补充:

(最多只允许输入30个字)