java为何用String类型保存大文本字符会出现字符丢失问题 环境oracle9i hibernate3 weblogic ojdbc14映射文件我写成java.lang.string 保存大于32K的字节,就会出现无故丢失字符,还不可重现。应该可以重现啊。谁给解释下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,这个问题我也碰到过。一般来说如果字符串长度在1000~2000之间时,Oracle会将字符串视为Long型数据所以,如果字符串长度1000~2000之间时,给字符串追加空格就OK了LZ试试看 jacky68147527 不知道说的对不对,你的数据库是生成的还是自己创建的, 如果是自己创建的话你看看数据库里的type 是不是也是char 或者 varchar类型的. 字符在1000-2000字符到没有问题字符以大于32K就会出现存储无故丢失,当然换成Clob类型就没有错误 数据库采用CLOB类型,映射为text就行了映射为text类型的数据是作为流提交的 你把showsql打开,看看sql输出就清楚了映射为string的话,字段的值是直接作为字符串内容在sql中出现的,但是sql中单个字段长度不能超过4000b registerHibernateType(Types.LONGVARCHAR,Hibernate.TEXT.getName()); 这种方法是不是注册一下hibernate没有的类型 看看你数据库那个字段的数据类型是什么,varchar好像存不了那么多内容,用text 楼主做论坛吗? 那么大得多少字啊! 为啥不用CLOB? 我在Oracle中也碰到这样的问题,个人觉得是Oracle驱动方面的Bug解决方法是将该字段类型映射成chdw.StringClobType extends org.hibernate.type.StringClobType建立一个临时表emptyclobtable(cclob CLOB),在nullSafeSet方法里面先delete from emptyclobtable再insert into emptyclobtable values(empty_clob())再select cclob from emptyclobtable得到CLOB clob 后再调用 clob.getCharacterOutputStream().write(str);再调用stat.setClob(i, clob);这样设置CLOB这样在外面代码中是不会看到Clob的存在,还是String操作。 还是java键盘监听问题,测试程序中没问题,主程序中仍然不监听。 求助! Hashtable 的拷贝问题 jEditorPane如何显示多内码html文件? 请教怎么用NetBeans打开一个工程源码 郁闷。。。。 判断数据类型的函数 -------------一段代码,有几个简单的问题希望弄清楚-------------- 做这类程序VC++好还是Java好? 为什么在静态方法里不能用this ? 知识点询问~~~理论 求求大家,看看问题在哪里?我还不会调试程序.谢谢...
你的数据库是生成的还是自己创建的, 如果是自己创建的话你看看数据库里的type 是不是也是char 或者 varchar类型的.
字符在1000-2000字符到没有问题
字符以大于32K就会出现存储无故丢失,当然换成Clob类型就没有错误
映射为text类型的数据是作为流提交的
映射为string的话,字段的值是直接作为字符串内容在sql中出现的,但是sql中单个字段长度不能超过4000b
再insert into emptyclobtable values(empty_clob())
再select cclob from emptyclobtable
得到CLOB clob 后再调用 clob.getCharacterOutputStream().write(str);再调用stat.setClob(i, clob);这样设置CLOB
这样在外面代码中是不会看到Clob的存在,还是String操作。