什麼是 JDBC Clob 資料型別?如何儲存和讀取其中的資料?


CLOB 通常指字元大物件,SQL Clob 是一種內建資料型別,用於儲存大量文字資料。使用此資料型別,您可以儲存多達 2,147,483,647 個字元的資料。

JDBC API 的 java.sql.Clob 介面表示 CLOB 資料型別。由於 JDBC 中的 Clob 物件是使用 SQL 定位器實現的,因此它儲存指向 SQL CLOB 的邏輯指標(而不是資料本身)。

MYSQL 資料庫使用四個變數支援此資料型別。

  • TINYTEXT:最大長度為 28-1 (255) 個字元的 CLOB 型別。

  • TEXT:最大長度為 216-1 (65535) 個字元的 CLOB 型別。

  • MEDIUMTEXT:最大長度為 224-1 (16777215) 個字元的 CLOB 型別。

  • LONGTEXT:最大長度為 232-1 (4294967295) 個字元的 CLOB 型別。

將 Clob 資料型別儲存到資料庫表中

要使用 JDBC 程式將 Clob 資料型別儲存到資料庫中,請按照以下步驟操作:

步驟 1:連線到資料庫

您可以使用 DriverManager 類的 getConnection() 方法連線到資料庫。

透過將 MySQL URL (例如 jdbc:mysql:///sampleDB,其中 sampleDB 是資料庫名稱)、使用者名稱和密碼作為引數傳遞給 getConnection() 方法來連線到 MySQL 資料庫。

String mysqlUrl = "jdbc:mysql:///sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");

步驟 2:建立預編譯語句

使用 Connection 介面的 prepareStatement() 方法建立一個 PreparedStatement 物件。將插入查詢(帶有佔位符)作為引數傳遞給此方法。

PreparedStatement pstmt = con.prepareStatement("INSERT INTO Technologies(Name,
Type, Article ) VALUES (?, ?, ?)");

步驟 3:為佔位符設定值

使用 PreparedStatement 介面的 setter 方法為佔位符設定值。根據列的資料型別選擇方法。例如,如果列為 VARCHAR 型別,則使用 setString() 方法;如果列為 INT 型別,則可以使用 setInt() 方法。

如果列為 Clob 型別,則可以使用 setCharacterStream() 或 setClob() 方法為其設定值。將表示引數索引的整數變數和 Reader 類的物件作為引數傳遞給這些方法。

pstmt.setString(1, "JavaFX");
pstmt.setString(2, "Java Library");
FileReader reader = new FileReader("E:\images\javafx.txt");
pstmt.setClob(3, reader);
pstmt.execute();

步驟 4:執行語句

使用 PreparedStatement 介面的 execute() 方法執行上面建立的 PreparedStatement 物件。

從資料庫中檢索 blob

ResultSet 介面的 getClob() 方法接受一個表示列索引的整數(或表示列名稱的字串值),並檢索指定列的值,並將其以 Clob 物件的形式返回。

while(rs.next()) {
   System.out.println(rs.getString("Name"));
   System.out.println(rs.getString("Type"));
   Clob clob = rs.getClob("Article");
}

Clob 介面的 getCharacterStream() 方法檢索當前 Clob 物件的內容並作為 Reader 物件返回。

使用 getClob() 方法,您可以將 Clob 的內容作為 Reader 物件獲取,並使用 FileOutputStream 物件的 write() 方法建立包含檢索到的內容的文字檔案。

Reader r = clob.getCharacterStream();
char cbuf[] = new char[r.read()];
r.read(cbuf);
FileOutputStream outPutStream = new
FileOutputStream("E:\images\clob_output"+i+".txt");
outPutStream.write(cbuf.toString().getBytes());

示例

以下示例在 MySQL 資料庫中建立一個包含 Clob 資料型別的表。將來自檔案的大型文字資料插入到其中。檢索文字並將其儲存到另一個文字檔案中。

import java.io.FileReader;
import java.io.FileWriter;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class ClobExample {
   public static void main(String args[]) throws Exception {
      //Registering the Driver
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //Getting the connection
      String mysqlUrl = "jdbc:mysql:///sampleDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Creating a table
      Statement stmt = con.createStatement();
      stmt.execute("CREATE TABLE Technologies( Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT)");
      System.out.println("Table Created......");

      //Inserting values
      String query = "INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "JavaFX");
      pstmt.setString(2, "Java Library");
      FileReader reader = new FileReader("E:\images\javafx.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      pstmt.setString(1, "CoffeeScript");
      pstmt.setString(2, "Scripting Language");
      reader = new FileReader("E:\images\coffeescript.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      pstmt.setString(1, "Cassandra");
      pstmt.setString(2, "NoSQL Database");
      reader = new FileReader("E:\images\cassandra.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      //Retrieving the data
      ResultSet rs = stmt.executeQuery("select * from Technologies");
      int j = 0;
      System.out.println("Contents of the table are: ");
      while(rs.next()) {
         System.out.println(rs.getString("Name"));
         Clob clob = rs.getClob("Article");
         Reader r = clob.getCharacterStream();
         String filePath = "E:\Data\clob_output"+j+".txt";
         FileWriter writer = new FileWriter(filePath);
         int i;
         while ((i=r.read())!=-1) {
            writer.write(i);
         }
         writer.close();
         System.out.println(filePath);
         j++;
      }
   }
}

輸出

Connection established......
Table Created......
Contents of the table are:
JavaFX
Java Library
E:\images\clob_output1.txt
CoffeeScript
Scripting Language
E:\images\clob_output2.txt
Cassandra
NoSQL Database
E:\images\clob_output3.txt

更新於:2019年7月30日

瀏覽量 10K+

啟動您的 職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.