1 使用get方法读取CLOB列。使用get方法读取CLOB列的9个步骤:
1.将包含LOB的定位器的行读入结果集
// step 1: retrieve the row containing the LOB locator
ResultSet clobResultSet = myStatement.executeQuery(
"SELECT clob_column " +
"FROM clob_content " +
"WHERE file_name = '" + sourceDirectory + fileName + "'"
);
clobResultSet.next();
2.在Java程序中创建一个LOB对象,并且将LOB定位器从结果集读入这个LOB对象
// step 2: create a LOB object and read the LOB locator
CLOB myClob =
((OracleResultSet) clobResultSet).getCLOB("CLOB_COLUMN");
3.从LOB对象获取LOB的组块大小
// step 3: get the chunk size of the LOB from the LOB object
int chunkSize = myClob.getChunkSize();
4.创建一个缓冲区来存储取自LOB对象的数据组块
// step 4: create a buffer to hold a chunk of data retrieved from
// the LOB object
char [] textBuffer = new char[chunkSize];
5.创建一个文件对象
// step 5: create a file object
String saveFile = targetDirectory + "readCLOB" + fileName;
File myFile = new File(saveFile);
6.创建输出流对象以便将LOB内容写到新文件
// step 6: create output stream objects to write the LOB contents
// to the new file
FileOutputStream myFileOutputStream =
new FileOutputStream(myFile);
OutputStreamWriter myWriter =
new OutputStreamWriter(myFileOutputStream);
BufferedWriter myBufferedWriter = new BufferedWriter(myWriter);
7.从LOB对象获取LOB内容的长度
// step 7: get the length of the LOB contents from the LOB object
long clobLength = myClob.length();
8.使用以下步骤读取LOB的内容并且将它写到文件,如果未到达LOB内容的末尾
A)将数据组块从LOB对象读入第四步中创建的缓冲区
B)将缓冲区的内容写到新文件
// step 8: while the end of the LOB contents has not been reached,
// read a chunk of data from the LOB into the buffer,
// and write the buffer contents to the file
for (
long position = 1;
position <= clobLength;
position += chunkSize
) {
// read a chunk of data from myClob using the getChars() method
// and store it in the buffer
int charsRead =
myClob.getChars(position, chunkSize, textBuffer);
// write the buffer contents to the file
myBufferedWriter.write(textBuffer);
} // end of for
9.关闭流对象
// step 9: close the stream objects
myBufferedWriter.close();
myWriter.close();
myFileOutputStream.close();
2 使用流方法读取CLOB列,使用流方法读取LOB列的5个步骤:
1. 将包含LOB定位器的行读入结果集
2. 在Java程序中创建一个LOB对象,并且从结果集读取LOB定位器
前两步与get方法相同。下面介绍其他三步:
3. 创建一个输入流对象并且调用合适的LOB对象输入流函数
// step 3: create an input stream object and call the appropriate
// LOB object input stream function
InputStream myInputStream = myClob.getAsciiStream();
4. 使用输入流函数读取LOB内容并且将它写到文件
private static void saveFile(
InputStream myInputStream,
String fileName
) throws IOException {
// create a file object
File myFile = new File(fileName);
// create a file output stream
FileOutputStream myFileOutputStream =
new FileOutputStream(myFile);
// read the contents from the input stream until
// the end has been reached (the read() method
// returns -1 at the end)
byte [] byteBuffer = new byte[8132];
int bytesRead;
while ((bytesRead = myInputStream.read(byteBuffer)) != -1) {
// write the input to the file
myFileOutputStream.write(byteBuffer);
} // end of while
// close the file output stream
myFileOutputStream.close();
} // end of saveFile()
5. 关闭输入流对象
// step 5: close the input stream object
myInputStream.close();