ADO操作Oracle\DB2\MySQL数据库CLOB\LONGTEXT备忘

  因于工作需要,需要读取、写入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左右这三种数据库没有问题。但是要注意,程序与数据库的字符集、编码方式要一致,否则读取与写入方式不一致,可能导致数据不一致。

你可能感兴趣的:(数据库)