关闭

利用oracle long类型字段问题

标签: oraclestreamobjectinsertapi数据库
2169人阅读 评论(0) 收藏 举报
分类:

今天上午突然解决了这个问题,真是高兴,主要参考文章:

http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=17121&messageID=97829

 我在编写应用时,需要大量的插入大文本,但是oracle 的clob操作起来比较繁琐,应此我没有选择使用clob,而是使用了oracle以前版本中的long类型[但是long类型有一些限制,在一个表中只能有一个long字段]。
开始的时候我直接使用insert into table1 values(a,b[long])的方式插入数据库,但是oracle有些限制一条语句不能超过4000个字符,并报ORA-01704的错误。
经过查找oracle 的文档找到了解决的方法,就是对于long的字段使用setCharacterStream()方法将String插入数据库。

代码:
sql="insert into msg_info values (?,?,?,?[long类型字段],'C',sysdate,sysdate+"+msgterm+",?)";
pstat1 = conn.prepareStatement(sql);
pstat1.setLong(1, msg_id);
      pstat1.setInt(2, msg_gp_id);
      pstat1.setString(3, msg_title);
      pstat1.setCharacterStream(4,new StringReader(msg_info.toString()),msg_info.length());
conn.commit();

      pstat1.setLong(5, this.upid);

setCharacterStream

void setCharacterStream(int parameterIndex,
                        Reader reader,
                        int length)
                        throws SQLException
Sets the designated parameter to the given Reader object, which is the given number of characters long. When a very large UNICODE value is input to a LONGVARCHAR parameter, it may be more practical to send it via a java.io.Reader object. The data will be read from the stream as needed until end-of-file is reached. The JDBC driver will do any necessary conversion from UNICODE to the database char format.

Note: This stream object can either be a standard Java stream object or your own subclass that implements the standard interface.

本来这个问题早就该解决,经验再次重复:API 非常重要,J2SE, J2EE , Oracle 的API,比任何参考书都有用!!!

还有就是要广泛利用资源.

再次感谢作者的那篇重要的文章!

现在还残留的问题是,我在oracle里面插入了blob(图片),也能正常显示,可是,用select 语句却看不见?!

现在不知道要找那个API了.....

0
0
查看评论

如何转换long类型字段

由于varchar2类型最大为4000字节,char最大为2000字节,而long类型最大可为2G,故直接将long类型转换成varchar2或者char 类型会丢失数据,并且oracle没有提供直接实现的函数。我们可以将long类型转换为clob类型,clob最大可存储4G,故不会丢失数据,下面来...
  • wylwyl1130
  • wylwyl1130
  • 2005-09-11 11:41
  • 1063

在oracle中字段类型LONG的使用注意事项

===============================================在oracle中字段类型LONG的使用注意事项 ----------------------------------------LONG数据类型使用上的一些说明 系统环境: 1、操作系统:Windows 2...
  • aptweasel
  • aptweasel
  • 2007-01-16 12:39
  • 5510

long类型字段转换成varchar2类型

参考文档: How to Convert a Long to Varchar2 (文档 ID 228532.1) /*long类型字段转换成varchar2类型*/ --建表 create table dxmy_long(lon long,var varchar2(100 )); --插数 inse...
  • ghostliming
  • ghostliming
  • 2015-12-27 01:29
  • 4767

LONG的模糊查询的问题

oracle是强烈不建议使用LANG类型的,因为它有太多弊端,很不灵活,bi
  • qinyu100
  • qinyu100
  • 2014-06-22 20:03
  • 1739

Oracle 数据库中 Long 类型字段的读取

最近在一个项目中遇到了需要读取 Oracle 数据库中的 Long 类型的字段的问题,折腾了好久,最后找到了其中的一个解决办法,决定记下了做个明灯吧!       这个项目用的是 Mybatis 做持久化,我能够改的只有映射文件 Mapper ,所以...
  • YangYudong2014
  • YangYudong2014
  • 2016-10-18 12:47
  • 3959

字段long型的模糊查询

字段为varchar,也就是string的模糊查询方法如下:String work = wsform.getWork();detachedCriteria.add(Restrictions.like("work",work,MatchMode.ANYWHERE));而long 型...
  • ssyan
  • ssyan
  • 2011-01-21 17:06
  • 1555

oracle数据库中将varchar2类型的字段改成clob类型 先将varchar2类型的字段改成long类型的,然后再将long类型改成clob类型

<br />CHAR 固定长度字符串 最大长度2000 bytes VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes NVARCHAR2 根据字符集而定的可变长度字符串 最...
  • heartdiamond
  • heartdiamond
  • 2010-09-01 13:39
  • 3438

oracle创建表中LONG字段类型的使用注意事项

使用说明: 1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。 2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。 3、LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类...
  • sdmxdzb
  • sdmxdzb
  • 2015-11-04 15:12
  • 741

oracle中对LONG列进行查询

oracle中对LONG列进行查询
  • a9529lty
  • a9529lty
  • 2010-11-25 15:03
  • 9651

Oracle数据库LONG类型移植

LONG类型字段很原始使用时限制也很多,与LONG类型相对应的类型有CLOB,LONG类型虽然已经不建议使用但还是可以发现在Oracle数据字典相关的视图中还是有LONG类型的身影。 LONG类型的移植 可以直接通过DDL方式显示的修改成LONG类型:可以通过TO_LOB
  • ybygjy
  • ybygjy
  • 2011-10-13 22:17
  • 1578
    个人资料
    • 访问:130966次
    • 积分:2769
    • 等级:
    • 排名:第15300名
    • 原创:119篇
    • 转载:9篇
    • 译文:0篇
    • 评论:29条
    最新评论