您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2026/1/1 1:40:12发布17次查看
java对oracle中clob数据类型是不能够直接插入的,但是可以通过流的形式对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字段下,直接将数据读取出来。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product