CLOB通常代表Character Large Object,SQL Clob是内置数据类型,用于存储大量文本数据。使用此数据类型,您最多可以存储2,147,483,647个字符。
JDBC API的java.sql.Clob接口表示CLOB数据类型。由于JDBC中的Clob对象是使用SQL定位器实现的,因此它包含指向SQL CLOB(而不是数据)的逻辑指针。
MYSQL数据库使用四个变量对此数据类型提供支持。
TINYTEXT: CLOB类型,最多28-1(255)个字符。
文本: CLOB类型,最多216-1(65535)个字符。
MEDIUMTEXT:一种CLOB类型,最多包含224-1(16777215)个字符。
LONGTEXT: CLOB类型,最多包含232-1(4294967295)个字符。
要将Clob数据类型存储到数据库,请使用JDBC程序执行以下步骤
您可以使用DriverManager类的getConnection()方法连接到数据库。
通过传递MySQL URL到jdbc:mysql:// localhost / sampleDB(其中sampleDB是数据库名称),用户名和密码作为getConnection()
方法的参数,以连接到MySQL数据库。
String mysqlUrl = "jdbc:mysql://localhost/sampleDB"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
使用Connection接口的prepareStatement()方法创建PreparedStatement对象。为此方法传递插入查询(带有占位符)作为参数。
PreparedStatement pstmt = con.prepareStatement("INSERT INTO Technologies(Name, Type, Article ) VALUES (?, ?, ?)");
使用PreparedStatement接口的setter方法将值设置为占位符。根据列的数据类型选择方法。例如,如果该列为VARCHAR类型,则使用setString()
method;如果该列为INT类型,则可以使用setInt()
method。
如果它是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();
使用PreparedStatement接口的execute()方法执行上面创建的PreparedStatement对象。
getClob()
ResultSet接口的方法接受代表列索引的整数(或代表列名称的String值),并检索指定列的值,并以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()方法,可以使用FileOutputStream对象的write()方法将Clob的内容作为Reader对象获取,并使用检索到的内容创建文本文件。
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("Connection established......"); //创建表 Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE Technologies( Name VARCHAR(255), Type VARCHAR(255), Article LONGTEXT)"); System.out.println("Table Created......"); //插入值 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(); //检索数据 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