📜  Java Oracle数据库检索文件(1)

📅  最后修改于: 2023-12-03 15:15:57.392000             🧑  作者: Mango

Java Oracle数据库检索文件

在 Java 开发中,经常需要从数据库中读取文件。本文介绍使用 Java 和 Oracle 数据库进行文件检索的方法。

环境依赖
  • Java 1.8+
  • Oracle 数据库 11g / 12c
  • ojdbc.jar
步骤
  1. 在 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。

  1. 将文件保存到 Oracle 数据库中

使用如下 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 是文件的路径。

  1. 从 Oracle 数据库中读取文件

使用如下 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 类型的字段只适合存储较小的文件,对于大文件应该采用分块存储的方式。