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

Java中读取Oracle中Clob字段的两种方法

第一种:import java.io.BufferedInputStream;import java.io.IOException;import java.sql.Clob;import java.s...
  • xianbin
  • xianbin
  • 2006年06月13日 15:59
  • 5461

Oracle 11g中CLOB字段类型的数据读取

Oracle 11g中的CLOB字段类型的数据读取 LOB 类型的数据库列仅存储定位符,该定位符指向大型对象的存储位置.用DBMS_LOB程序包操纵 LOB 数据. 读取Oracle字段类型为CLO...
  • m0_37934173
  • m0_37934173
  • 2017年05月15日 11:02
  • 1150

PowerBuilder 读取Oracle Clob字段内容

  最近需要用PowerBuilder读取Oracle 的Clob字段内容,发现直接使用SELECTBLOB读取的数据总是有数据不能完全读取问题。最后我在网上进行了搜罗,发现可以写一个FUNCTION...
  • caok
  • caok
  • 2009年03月10日 08:53
  • 1305

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

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

Java将数据写入Oracle的Clob字段中

---------------------将大量数据写入Clob字段中------------- 一。得到连接     def dbDriver = "oracle.jdbc.driver.Ora...
  • yanliling0909
  • yanliling0909
  • 2013年01月15日 15:21
  • 952

Oracle中如何查询CLOB字段类型的内容

Oracle中如何查询CLOB字段类型的内容 语法 select * from table_name where dbms_lob.instr(字段名(clod类型),'查询条件',1,1) > 0;...
  • xufengzhu
  • xufengzhu
  • 2017年02月15日 16:52
  • 8471

Oracle中对clob类型字段的操作

下面这篇文章说的很详细,我再做两点补充说明:        第一,LOB数据不能象其它类型数据一样直接插入(INSERT)。插入前必须先插入一个空的LOB对象,CLOB类型的空对象为EMPTY_CLO...
  • sdliubo
  • sdliubo
  • 2005年02月02日 16:49
  • 8999

C#读取Clob数据并转换为字符串

C#读取Clob数据并转换为字符串:using System.Data.OracleClient;using System.IO;using System.Text;        int actua...
  • longronglin
  • longronglin
  • 2007年05月08日 20:53
  • 6048

java读取Oracle中大字段数据(CLOB)的方法

今天遇到一个难题,Oracle数据库中有一个字段是CLOB类型,java简单解析不了。去查找了一下解决方案,试了好几种,下面的这种是有效的。 public String ClobToString...
  • u011342403
  • u011342403
  • 2017年06月07日 22:49
  • 1341

Oracle 插入超4000字节的CLOB字段的处理方法

我们可以通过创建单独的OracleCommand来进行指定的插入,即可获得成功,这里仅介绍插入clob类型的数据,blob与此类似,这里就不介绍了,下面介绍两种办法 在通过拼组sql语句来实现数据插...
  • xiaomaguohe26
  • xiaomaguohe26
  • 2013年12月19日 10:28
  • 1699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java对Oracle中Clob类型数据的读取和写入
举报原因:
原因补充:

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