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

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

java将clob类型文件写到磁盘_Java对Oracle中Clob类型数据的读取和写入相关推荐

  1. clob在java里的类型_Java对Oracle中Clob类型数据的读取和写入(转)

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

  2. java Clob转CLOB_Java获取Oracle中CLOB字段转换成String

    Java获取Oracle中CLOB字段转换成String : try {PreparedStatement stmt = session.connection().prepareStatement(s ...

  3. oracle clob 类型条件,Oracle中Clob类型如何处理?

    Oracle中Clob类型处理解析最近利用NHibernate映射类型为Clob字段在插入数据时发现当字符的字节数(一个半角字符一个字节,一个全角字符两个字节)在 2000-4000之间时报错(ORA ...

  4. Mysql 查询blob数据很慢,关于oracle中clob字段查询慢的问题及解决方法

    关于oracle中clob字段查询慢的问题及解决方法 最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了. blob字段直 ...

  5. mysql clob转string_Java获取Oracle中CLOB字段转换成String

    Java获取Oracle中CLOB字段转换成String : try {PreparedStatement stmt = session.connection().prepareStatement(s ...

  6. oracle中varchar2类型的字段长度单位默认是按照byte来定义

    1.背景 使用oracle时,会这样忽略一个问题:oracle中varchar2类型的字段长度单位不指定类型时,按照byte来定义. 如果数据库使用的字符集是GBK,GB2312或者其他定长字符集的话 ...

  7. 【python图像处理】txt文件数据的读取与写入

    在使用python进行数据和图像处理的过程中,经常会遇到从txt文件中读取数据.已经将处理过程中的矩阵数据写入到txt文件的情形,如在伪彩映射中读取颜色映射表. 下面介绍几种我平时常用的txt文件数据 ...

  8. Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长

    http://otvety.google.ru/otvety/thread?tid=46ed8b35f29d2640 在Oracle中Number类型可以用来存储0,正负定点或者浮点数,可表示的数据范 ...

  9. ORACLE中date类型字段的处理

    ORACLE中date类型字段的处理 (1)在英文版本的ORACLE中默认日期格式为'DD-MON-YY',例如'01-JAN-98' 在汉化的中文版本中ORACLE默认日期格式为'日-月-年',例如 ...

最新文章

  1. Unified Networking Lab 安装使用IOL镜像
  2. SPOJ.TLE - Time Limit Exceeded(DP 高维前缀和)
  3. 当我们在浏览器中输入一个URL后,发生了什么?
  4. C语言编程规范--常用缩写词
  5. 第一次体验python有感
  6. 【研究方向是SDN该怎么做?】软件定义网络(SDN)的安全挑战和机遇
  7. linux内核关闭igmp,Linux kernel IGMP多个安全漏洞
  8. 圣诞海报模板|给设计师点灵感
  9. 下载量超 20 亿的 8 款 Android 应用涉广告欺诈,谁在“猎杀”猎豹移动?
  10. 【MySQL笔记】MySql5安装图解教程
  11. 游戏数据分析指标定义 | 通用
  12. Too many open files故障解决一例
  13. 关于5G使用的新型技术小结
  14. Hbase性能测试及优化过程记
  15. Linux下强制关闭程序
  16. HCSA-08 威胁防护介绍、ARP防护、网络攻击防护、病毒过滤、入侵防御、边界流量过滤
  17. Linux环境AES解密报错:Given final block not properly padded. Such issues can arise if a bad key is used dur
  18. Windows7 Ubuntu 双系统安装卸载工具备份
  19. python脚本自动化赚钱系统_python实现自动化上线脚本的示例
  20. 电商大数据分析平台项目(一)项目框架

热门文章

  1. ES6之路第十二篇:Promise对象
  2. MarkdownPad 2 常用快捷键
  3. JavaScript之共享onload
  4. Spring AOP 的proxy详解
  5. MySQL执行外部sql脚本
  6. Google 菜市场(Android Market)上不去的解决方法
  7. Go to sleep
  8. [发布]Quartz.NET 示例程序:企业调度器 V0.2 源代码
  9. 一篇文章讲清楚人工智能、机器学习和深度学习的区别和联系
  10. 解决windows显示开启HDR后chrome内截图泛白问题