ADO操作Oracle\DB2\MySQL数据库CLOB\LONGTEXT备忘
2016-05-16 18:51
627 查看
因于工作需要,需要读取、写入Oracle和DB2数据库的CLOB字段,以及MySQL数据库的LONGTEXT字段。在JAVA中,使用hibernate操作CLOB或LONGTEXT时,只需将相应字段映射为text,就可以像普通字符串一样进行读取和写入,只是要注意的是,可能需要将相应的jdbc驱动升级到相应版本。
但是在ADO中,经过测试,读取CLOB和LONGTEXT字段可以像普通字符串一样读取(至少我测试没有遇到问题,但不保证在CLOB或LONGTEXT字段特别大时会出问题)。既是说直接用select语句查询出来,再取相应字段值即可。但是写入时,MySQL可以直接像字符串类型一样写入,既是说直接将LONGTEXT字段的值直接写到insert语句里再执行即可。对于Oracle和DB2数据库,如果CLOB值不是很长,也可以直接写到insert语句中,但是一但CLOB的值超长,就会报错。
Oracle:ORA-01704: 字符串文字太长
DB2:[DB2/NT] SQL0102N 以 "xxxxxxxxxxx" 开始的字符串常量太长。 SQLSTATE=54002
通过查询,CLOB字段的长度在4000以下时,Oracle不会报错,而DB2支持的最大长度是32672(SQL0102N)。
可以使用BLOB的方式写入CLOB,经过测试,这三种数据库都没有问题,可以正常写入。
楼主测试时,字符串的长度在1M左右,因为需要存储的是一个XML,1M的XML已经不小了,所以没有继续测试更长的CLOB。因此不保证,CLOB的值更大时,直接使用select和insert直接读取和写入没有问题。
楼主最终的做法是,读取直接用select方式,写入用插入BLOB的方式。测试在1M左右这三种数据库没有问题。但是要注意,程序与数据库的字符集、编码方式要一致,否则读取与写入方式不一致,可能导致数据不一致。
但是在ADO中,经过测试,读取CLOB和LONGTEXT字段可以像普通字符串一样读取(至少我测试没有遇到问题,但不保证在CLOB或LONGTEXT字段特别大时会出问题)。既是说直接用select语句查询出来,再取相应字段值即可。但是写入时,MySQL可以直接像字符串类型一样写入,既是说直接将LONGTEXT字段的值直接写到insert语句里再执行即可。对于Oracle和DB2数据库,如果CLOB值不是很长,也可以直接写到insert语句中,但是一但CLOB的值超长,就会报错。
Oracle:ORA-01704: 字符串文字太长
DB2:[DB2/NT] SQL0102N 以 "xxxxxxxxxxx" 开始的字符串常量太长。 SQLSTATE=54002
通过查询,CLOB字段的长度在4000以下时,Oracle不会报错,而DB2支持的最大长度是32672(SQL0102N)。
可以使用BLOB的方式写入CLOB,经过测试,这三种数据库都没有问题,可以正常写入。
楼主测试时,字符串的长度在1M左右,因为需要存储的是一个XML,1M的XML已经不小了,所以没有继续测试更长的CLOB。因此不保证,CLOB的值更大时,直接使用select和insert直接读取和写入没有问题。
楼主最终的做法是,读取直接用select方式,写入用插入BLOB的方式。测试在1M左右这三种数据库没有问题。但是要注意,程序与数据库的字符集、编码方式要一致,否则读取与写入方式不一致,可能导致数据不一致。
相关文章推荐
- Oracle 行转列和列转行
- Oracle 9.2.0.8 RAC使用pl/sql连接数据库,查看数据库时间比现实时间晚8小时
- Oracle经常出现失效对象处理方法
- oracle备份脚本
- Oracle函数
- Oracle表变化趋势追踪记录
- oracle数据库创建表代码示例
- Oracle 查看相关优化器参数
- oracle如何用sql查询某个表中所有的字段名称(列名)?
- oracle如何用sql查询数据库中所有的表名?
- ORACLE 11g的密码错误延时验证
- 安装oracle提示cannot open display: :0.0
- oracle函数(corr相关性系数)
- ORACLE函数大全
- .net framework 4.0后连接Oracle问题
- java导出oracle表结构
- red hat安装oracle报错 libawt.so: libXp.so.6: cannot open shared object file: No such file
- Oracle 数据泵使用详解
- oracle遇到死锁杀进程
- oracle隐含参数"_system_trig_enabled"