什么是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
极客教程