📅  最后修改于: 2023-12-03 15:15:57.392000             🧑  作者: Mango
在 Java 开发中,经常需要从数据库中读取文件。本文介绍使用 Java 和 Oracle 数据库进行文件检索的方法。
可以通过以下 SQL 语句创建一个文件表格:
CREATE TABLE file_table
(
id NUMBER(10) NOT NULL,
filename VARCHAR2(100) NOT NULL,
content BLOB NOT NULL,
PRIMARY KEY (id)
)
此表格包含三个字段:id、filename、content。
使用如下 Java 代码将一个文件保存到数据库中:
Connection conn = DriverManager.getConnection(url, user, password);
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO file_table (id, filename, content) VALUES (?, ?, ?)");
pstmt.setInt(1, id);
pstmt.setString(2, file.getName());
pstmt.setBinaryStream(3, fis, (int) file.length());
pstmt.executeUpdate();
fis.close();
pstmt.close();
conn.close();
其中,url、user、password 是数据库连接信息,id 是文件的编号,filePath 是文件的路径。
使用如下 Java 代码从数据库中读取文件:
Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement("SELECT filename, content FROM file_table WHERE id = ?");
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
String filename = rs.getString("filename");
Blob blob = rs.getBlob("content");
InputStream is = blob.getBinaryStream();
FileOutputStream fos = new FileOutputStream(new File(outputPath));
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) != -1) {
fos.write(buffer, 0, length);
}
fos.close();
is.close();
}
rs.close();
pstmt.close();
conn.close();
其中,url、user、password 是数据库连接信息,id 是文件的编号,outputPath 是输出文件的路径。
通过以上步骤,我们可以方便地使用 Java 和 Oracle 数据库进行文件检索。需要注意的是,Blob 类型的字段只适合存储较小的文件,对于大文件应该采用分块存储的方式。