ResultSet接口提供名为getClob()和getCharacterStream()的方法来检索Clob数据类型,通常存储文件的内容。
这些方法接受表示列索引的整数(或表示列名称的字符串值)并检索指定列处的值.
区别在于 getClob() 方法返回一个 Clob 对象,而 getCgaracterStream() 方法返回一个包含 Clob 数据类型内容的 Reader 对象。
示例
假设我们在数据库中创建了一个名为 Articles 的表,并具有以下描述。
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| Name | varchar(255) | YES | | NULL | |
| Article | longtext | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
登录后复制
并且,我们在其中插入了三篇文章,名称为文章 1、文章 2 和文章 3,如下所示:
示例
以下程序使用 getString() 和 getClob() 方法检索表 Articles 的内容,并将其保存在指定文件。
import java.io.FileWriter;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class RetrievingFileFromDatabase {
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://localhost/sampleDB";
Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
System.out.println("Connection established......");
//Creating aStatement
Statement stmt = con.createStatement();
//Retrieving the data
ResultSet rs = stmt.executeQuery("select * from Articles");
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 reader = clob.getCharacterStream();
String filePath = "E:Dataclob_output"+j+".txt";
FileWriter writer = new FileWriter(filePath);
int i;
while ((i = reader.read())!=-1) {
writer.write(i);
}
writer.close();
System.out.println(filePath);
j++;
}
}
}
登录后复制
输出
Connection established......
Contents of the table are:
article1
E:Dataclob_output0.txt
article2
E:Dataclob_output1.txt
article3
E:Dataclob_output2.txt
登录后复制
以上就是我们如何使用 JDBC 从数据库中检索文件?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!