如何在 Java 中將 CLOB 型別轉換為 String?


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

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

MySQL 資料庫使用四個變數(TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT)提供對這種資料型別的支援。

將 CLOB 資料型別轉換為字串

  • 使用 PresparedStatement 介面的 getClob()getCharacterStream() 方法從表中檢索 Clob 值。
Reader r = clob.getCharacterStream();
  • 從檢索到的字元流中逐個讀取每個字元,並將它們追加到 StringBuilderStringBuffer 中。
int j = 0;
StringBuffer buffer = new StringBuffer();
int ch;
while ((ch = r.read())!=-1) {
   buffer.append(""+(char)ch);
}
System.out.println(buffer.toString());
j++;
  • 最後,顯示或儲存獲得的字串。
System.out.println(buffer.toString());

示例

讓我們使用以下查詢在 MySQL 資料庫中建立一個名為 technologies_data 的表:

CREATE TABLE Technologies (Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT);

表的第三列 Article 儲存 CLOB 型別的數。

以下 JDBC 程式最初在 technologies_data 表中插入 5 條記錄,並將文字檔案(其內容)儲存到 article 列(CLOB 型別)。

然後,它檢索表中的記錄,並顯示文章的名稱和內容。在這裡,我們嘗試將檢索到的 CLOB 的資料轉換為字串並顯示它。

import java.io.FileReader;
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 ClobToString {
   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:///sampledatabase";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //Creating a Statement object
      Statement stmt = con.createStatement();
      //Inserting values
      String query = "INSERT INTO Technologies_data VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "JavaFX");
      pstmt.setString(2, "Java Library");
      FileReader reader = new FileReader("E:\images\javafx_contents.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      pstmt.setString(1, "CoffeeScript");
      pstmt.setString(2, "Scripting Language");
      reader = new FileReader("E:\images\coffeescript_contents.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      pstmt.setString(1, "Cassandra");
      pstmt.setString(2, "NoSQL Database");
      reader = new FileReader("E:\images\cassandra_contents.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      //Retrieving the data
      ResultSet rs = stmt.executeQuery("select * from Technologies_data");
      System.out.println("Contents of the table are: ");
      while(rs.next()) {
         System.out.println("Article: "+rs.getString("Name"));
         Clob clob = rs.getClob("Article");
         Reader r = clob.getCharacterStream();
         StringBuffer buffer = new StringBuffer();
         int ch;
         while ((ch = r.read())!=-1) {
            buffer.append(""+(char)ch);
         }
         System.out.println("Contents: "+buffer.toString());
         System.out.println(" ");
      }
   }
}

輸出

Connection established......
Contents of the table are:
Article: JavaFX
Contents: JavaFX is a Java library using which you can develop Rich Internet Applications. By using Java technology, these applications have a browser penetration rate of 76%.
Article: CoffeeScript
Contents: CoffeeScript is a lightweight language based on Ruby and Python which transcompiles (compiles from one source language to another) into JavaScript. It provides better syntax avoiding the quirky parts of JavaScript, still retaining the flexibility and beauty of the language.
Article: Cassandra
Contents: Apache Cassandra is a highly scalable, high-performance distributed database designed to handle large amounts of data across many commodity servers,
providing high availability with no single point of failure. It is a type of NoSQL database. Let us first understand what a NoSQL database does.

更新於: 2019-07-30

13K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告