什么是JDBC Clob数据类型?如何从中存储和读取数据?

什么是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类型。

阅读更多:MySQL 教程

将Clob数据类型存储到数据库中的表中

要将Clob数据类型存储到数据库中,请使用JDBC程序遵循以下步骤

步骤1:连接到数据库

您可以使用 DriverManager 类的 getConnection() 方法连接到数据库。

通过将MySQL URL,即 jdbc:mysql://localhost/sampleDB (其中sampleDB是数据库名称),用户名和密码作为参数传递给getConnection()方法来连接到MySQL数据库。

String mysqlUrl = "jdbc:mysql://localhost/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 {
      //注册驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //获取连接
      String mysqlUrl = "jdbc:mysql://localhost/sampleDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("连接成功......");
      //创建表
      Statement stmt = con.createStatement();
      stmt.execute("CREATE TABLE Technologies( Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT)");
      System.out.println("表创建成功......");

      //插入数据
      String query = "INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)";
      PreparedStatement pstmt = con.prepareStatement(query);
      pstmt.setString(1, "JavaFX");
      pstmt.setString(2, "Java库");
      FileReader reader = new FileReader("E:\images\javafx.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      pstmt.setString(1, "CoffeeScript");
      pstmt.setString(2, "脚本语言");
      reader = new FileReader("E:\images\coffeescript.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      pstmt.setString(1, "Cassandra");
      pstmt.setString(2, "NoSQL数据库");
      reader = new FileReader("E:\images\cassandra.txt");
      pstmt.setClob(3, reader);
      pstmt.execute();
      //检索数据
      ResultSet rs = stmt.executeQuery("select * from Technologies");
      int j = 0;
      System.out.println("表的内容是:");
      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++;
      }
   }
}

输出

连接成功......
表创建成功......
表的内容是:
JavaFX
Java库
E:\images\clob_output1.txt
CoffeeScript
脚本语言
E:\images\clob_output2.txt
Cassandra
NoSQL数据库
E:\images\clob_output3.txt

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程