Oracle中nclob字段的插入问题

问题描述

我用的是java 后台访问oracle给oracle中的nclob类型的字段插入string类型的对象logresult,如果对象的长度过长时提示ORA-01460: unimplemented or unreasonable conversion requested在网上查说jar包用class12不行,我就改成ojdbc14.jar,但是问题依旧,打印报错时string对象logresult长度为3277.如果长度短一切正常。在网上找了一种用io来处理这个string对象logresult的方法byte[] bytes_logresult =logresult.getBytes(); ByteArrayInputStream result = new ByteArrayInputStream( bytes_logresult ); InputStreamReader clobReader = new InputStreamReader(result); stmt.setCharacterStream(1,clobReader ,bytes_logresult.length); stmt.executeUpdate();这个时候操作成功!但是,一旦string类型长度过长,则乱码:字符串短则正常:这个到底是怎么回事,字符串长了为什么会全部乱码啊?帮忙解答下啊,我弄了好几天都没弄出来。。。 问题补充:Frankie199 写道

解决方案

研究了一中午,终于把这个问题解决了!1.创建test数据表(nclob好像不行,我改为clob了,不知是否影响你的使用?):create table nclob_test (id number primary key, content clob);2.java代码:public class TestClob{public static void write_nclob(Connection con) throws SQLException,IOException {// 1.新增数据时clob字段值为empty_clob()PreparedStatement smt = con.prepareStatement("insert into nclob_test(id, content) values(?, empty_clob())");smt.setInt(1, 1);smt.executeUpdate();smt.close();//此处演示从文件中加载内容File f = new File("e:\促进企业节能增效.txt"); // 示例文件大小为200kInputStream is = new FileInputStream(f);byte[] data = new byte[(int) is.available()];is.read(data);is.close();String buf = new String(data);//写clob数据到数据库update_nclob(con, buf);}public static void update_nclob(Connection con, String value) throws SQLException,IOException {// 此处注意用for update方式selectPreparedStatement smt = con.prepareStatement("select id, content from nclob_test where id=1 for update");// 更新clob值 注意必须将commit方式置为falseboolean old_c = con.getAutoCommit();con.setAutoCommit(false);ResultSet rs = smt.executeQuery();if (rs.next()) {Clob clob = rs.getClob(2);BufferedWriter out = new BufferedWriter(((oracle.sql.CLOB) clob).getCharacterOutputStream());BufferedReader in = new BufferedReader(new StringReader(value));int c;while ((c = in.read()) != -1) {out.write(c);}out.close();con.commit();smt.close();}con.setAutoCommit(old_c);}public static void load_nclob(Connection con) throws SQLException,IOException {PreparedStatement smt = con.prepareStatement("select * from nclob_test");ResultSet rs = smt.executeQuery();if (rs.next()) {Clob c = rs.getClob(2);char[] cbuf = new char[4096];c.getCharacterStream().read(cbuf);String content = c.getSubString(1, (int) c.length());// System.out.println(content);System.out.println(new String(cbuf));}rs.close();smt.close();}public static void main(String[] args) throws SQLException, IOException {Connection con = 此处省略与数据库的连接,这个大家都会吧?! write_nclob(con); load_nclob(con);}}
解决方案二:
这里有个帖子http://kb.cnblogs.com/a/890860/他是C#,希望对你有帮助,Good Luck

时间: 2024-10-22 07:45:15

Oracle中nclob字段的插入问题的相关文章

oracle中字段异常-oracle中部分字段名称显示异常

问题描述 oracle中部分字段名称显示异常 oracle中查询出来的字段名称,部分内容显示异常,求解决 如:股? 实际应为:股东代码 如:是否 实际应为:是否强平 在线等,求大神解决..... 补充一下:用plsql查询出来,显示是没问题的,但是用sql脚本,执行,导出excel格式,就显示异常 解决方案 导出时候是否字符编码的问题.

Oracle中检测字段是否包括中文字符

oracle中检测字段是否包括中文字符 select *   from (select 'abcdef' aa from dual          union all  select 'abc这是什么de' aa from dual)  where aa <> convert(aa, 'us7ascii', 'zhs16gbk');   aa -------- abc这是什么de 参考一下 select * from tb_miles_cb_order where convert(varch

在C#中如何向Oracle 中 BLOB 字段 插入数据

问题描述 在winform程序中(C#语言),需要将一张图片存入数据库中,Oracle中字段类型为BLOB,请问哪位大侠做过,给个示例,谢谢!QQ:36519258E-mail:dongwei_sy@163.com急用,不胜感激! 解决方案 解决方案二:DimstrConnAsStringDimobjConnAsOracleConnectionDimobjCommAsOracleCommandPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByVa

ORACLE中LOB字段的使用和维护

oracle 摘要:本文通过实例介绍了在ORACLE数据库中通过DBMS_LOB包使用和维护LOB数据类型的基本方法. 关键词:ORACLE DBMS_LOB LOB 维护 中图分类号:TP31 1.引言 随着社会的发展,在现代信息系统的开发中,需要存储的已不仅仅是简单的文字信息,同时还包括一些图片和音像资料或者是超长的文本.比如开发一套旅游信息系统,每一个景点都有丰富的图片.音像资料和大量的文字介绍.这就要求后台数据库要有存储这些数据的能力.ORACLE公司在其Oracle8i中通过提供LOB

ORACLE中BFILE字段的使用研究

oracle 因为做项目,需要使用BFILE字段存储图像文件,所以进行了一些研究. bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对   oracle来说是只读的,也不参与事务性控制和数据恢复   bfile的基本操作如下:     1.先在oracle数据库中下面我们建立一个目录别名,用于将文件定位指针映射到文   件系统:     create DIRECTORY 'tmpdir' AS '/tmp';   tmpdir表示逻辑目录名,'/tmp'是实际目录

java读取图像文件存入oracle中blob字段源代码

数据库:oracle 10G XE 数据源驱动:jdbc12.jar 文件名:WriteBlob 数据库中建立一个为clobtest的表,内有两个字段,name (varchar2(20)),content(blob). 1package dbdriver; 2 3/** *//** 4 * 2008-09-28 5 * @author duduli 6 * email: lxyzj2000@gmail.com 7 */ 8import java.sql.*; 9import java.io.*

Oracle中判断字段是否为数字_oracle

在我们平常的开发中可能会遇到这样的问题,就是判断某一列是否全部由数字组成,我们都知道oracle并没有给我们提供这样一个现成的函数,那么根据我的经验我总结了两个行之有效的方法(列名:column,表名:table): 1.使用trim+translate函数: 复制代码 代码如下: select * from table where trim(translate(column,'0123456789',' ')) is NULL; 这里要注意的是:translate函数的第三个参数是一个空格,不

Java读取oracle中xmltype字段

问题描述 比方说,selectdatafromxmlExample中的data字段是xmltype类型的,我在Java里面应该如何取到这个字段并解析它呢.说明:不使用xpath 解决方案 解决方案二:jdbc处理和xpath什么关系.解决方案三:我的意思是不使用这种查询语句:selectextract(t.data,'//name[@id="1"]')姓名fromdatat我想直接返回xml类型的数据到Java中,在Java里面应该怎么接受这种类型的值.

oracle中 一个字段放入多个其它字段内容

问题描述 客户提出这个报表需求 投诉量受理号码2次 3次 4次 5次 5次以上查出2次投诉的投诉量,和所有有两次投诉的号码, 投诉量还比较好查,通过having count可以查出,但是需要把满足条件的受理号码都放入这个字段这个有啥办法么? 问题补充:Steven20101201 写道 解决方案 只有拼接了,就是针对同样的投诉量,把投诉号码拼接起来,然后在其中用分隔符分开了,哎,又是这样一个需求.刚刚给上面一个写了个存储过程 也是拼接的.