操作CLOB

创建或者获取了一个Clob对象之后,就可以对该Clob对象进行操作了,比如读取数据,查找数据,写入数据,截取数据,获取Clob对象中数据的长度等操作。下面将一一作介绍。

获取Clob对象中数据的长度

直接调用Clob接口中的length()就行了

				int length = (int) clob.length();

读取Clob对象中的数据

读取数据有两种方法,第一种是直接从Clob对象中读取,第二种是从流中读取。

方法一:

在这种方法中Clob对象允许用户指定读取数据的起始位置和读取数据的长度,读出的数据是byte数据,比如从第100个character开始,读100个characters

				value = clob.getSubString(100,100);

方法二:

在这种方法中,允许用户通过Clob对象先创建一个java.io.InputStream流或java.io.Reader流,java.io.InputSteam流是用来读取Ascii字符的,而java.io.Reader流是用来读取Unicode-16字符的;然后可以用创建的流来读数据。

				java.io.InputStream is = clob.getAsciiStream();

				int len = 0;
				byte[] by = new byte[100];
				while ((length = is.read(by)) > 0){
					//对数据进行处理
				}

查找数据

Clob对象中允许用户查找一个字符串,也允许用户查找另外一个Clob对象

查找字符串,可以指定在Clob对象中查找的起始位置,比如从第100个字符开始查找

				//查找一个字符串
				int pos = (int) clob.position("d",10);

查找另外一个Clob对象,也可以指定在Clob对象中查找的起始位置,比如从第100个字符开始查找

				//查找另外一个Clob对象
				Clob anotherClob=( (OscarJdbc2Connection) con).createClob();
				pos = (int) clob.position(anotherClob,100);

往Clob对象中写数据

同读数据一样,写数据也有两种方法,第一种是直接往Clob对象中写数据,第二种则是通过流来写数据。写数据的时候,要将Connection对象的auto-commit模式设为false;否则的话,如果中间有一次写数据出错,前面的数据将已经被写到数据库中,不能再回退了。

方法一:

在这种方法中,允许用户指定Clob对象的起始位置,然后从该位置开始写数据,比如从第100个字符开始写数据。

				//往Clob对象中写数据,方法一
				clob.setString(100,value);

方法二:

在这种方法中,用户通过Blob对象先创建一个java.io.OutputStream流或java.io.Writer流,然后用创建的流来写数据,java.io.OutputStream流是用来写入Ascii字符,java.io.Writer流是用来写入Unicode-16字符的。同上面一样,用户也可以指定写Clob对象的起始位置, 比如从第100个字符开始写数据。

				//往Clob对象中写数据,方法二
				java.io.OutputStream os = clob.setAsciiStream(100);
				length = 0;
				byte[] bytes = new byte[100];
				//这里省略对异常的捕捉
				FileInputStream fis = new FileInputStream("test/bin.txt");
				while ((length = fis.read(bytes)) > 0){
					//写数据
					os.write(bytes,0,length);
				}
				//最后别忘了,将缓冲区的数据清空,
				os.flush();
				//调用os.close()时,会自动将缓冲区的数据清空,
				//所以上面的flush()方法可以不调用
				os.close();
				fis.close();

截取Clob对象数据

在Clob对象中允许用户将Clob对象的数据截至指定的长度,比如可以将Clob对象截至长度为1000。

				//现在Clob对象中的数据就不超过1000了
				clob.truncate(1000);