广州明生堂生物科技有限公司


读取Oracle数据库大对象两种方法

网络编程 读取Oracle数据库大对象两种方法 06-22

  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();


编辑:广州明生堂生物科技有限公司

标签:对象,定位器,创建一个,写到,内容