首先说一下CLOB。CLOB是一种数据库中的数据类型,它将字符大对象存储为数据库表某一行中的一个列值,请注意,这里说的是字符大数据,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据的逻辑指针而不是数据本身,也就是说,在表里面,Clob类型的存储的字段,它里面存的是一个指针而不是数据本身,这在统计时非常好用,因为你不需要知道数据是什么,只需要知道有多少个数据就够了。

    这里也说明一下CLOB和BLOB的区别

    1.CLOB是使用CHAR来保存数据,也就是说它是面对字符流的,如果它是保存一些相片之类的,会把二进制转化为字符进行存储。

    2.BLOB是试用二进制来保存数据的。

    如何在grails中存储Clob类型数据:

    1.在javaAPI中,Clob是一个接口,这个接口的一个实现类就是javax.sql.rowset.serial.SerialClob,通过这个构造参数就可以把一个数据以Clob字符串存进数据库。例如:(此处buffer是一个StringBuffer的一个对象)

    salarySettleOriginInstance.content = new javax.sql.rowset.serial.SerialClob(buffer.toString().toCharArray())

    如何在grails中读取Clob类型数据:

    1.这里要使用javax.sql.rowset.serial.SerialClob类的getSubString(long pos,             int length)方法来抓取数据库的Clob类型字段,它返回包含在此 SerialClob 对象中的子字符串的副本,从给定位置开始,后跟指定字符数。例如:

    def content = salarySettleOriginInstance.content.getSubString((Long)1, (int)salarySettleOriginInstance.content.length())

    

    • 参数:

    • pos - 子字符串中要复制的第一个字符的位置;SerialClob 对象的第一个字符位于位置 1;不得小于 1,并且开始位置与子字符串的长度之和必须小于此 SerialClob 对象的长度

    • length - 子字符串中要返回的字符数;不得大于此 SerialClob 对象的长度,并且开始位置与子字符串的长度之和必须小于此 SerialClob 对象的长度

    • 返回:

    • 包含此 SerialClob 对象的子字符串的 String 对象,从给定位置开始,包含指定的连续字符数

    • 抛出:

    • SerialException - 如果两个参数中的任意一个超出限制

此文章是针对grails存取Clob数据类型的,如果使用原始的java语音的jdbc进行存取,请参考Clob百度摆酷,附加链接http://baike.baidu.com/view/1889327.htm?fr=aladdin

    ps:此处javaJDK为1.7,grails版本为2.2