0

我的桌面上有图片“osta.jpg”,我想将它添加到我的数据库 Oracle SQL 中,然后在 Java 应用程序(JDBC)中从数据库中加载这张图片,并通过JLabel lblFilm = new JLabel(new ImageIcon( "picture_from_SQL")(Swing 库)在标签上显示

我尝试将图像添加到数据库:

ALTER TABLE film ADD bfile_loc bfile, bfile_type varchar2(4);
UPDATE film SET bfile_type = 'JPEG';
UPDATE film SET bfile_loc = bfilename('GIF_FILES','C:\Users\Maciej\Desktop\osta.jpg') WHERE kategoria IN 'thriller';

但是,我不知道如何在 Java 应用程序中加载它。

4

1 回答 1

1

首先,为了创建一个有效的 BFILE,您需要指定一个 Oracle 目录,然后指定该目录中文件的位置。我不知道你的GIF_FILES目录是什么,但如果它是使用创建的

CREATE DIRECTORY GIF_FILES AS 'C:\Users\Maciej\Desktop';

那么您将使用以下内容来设置 BFILE:

UPDATE film SET bfile_loc = bfilename('GIF_FILES', 'osta.jpg') WHERE kategoria IN 'thriller';

其次,为了使用 JDBC 从 Oracle 中读取 BFILE,您需要使用一些 Oracle 特定的类。首先,您需要将 ResultSet 转换为oracle.jdbc.OracleResultSet,因此您可以使用该getBFILE()方法从 ResultSet 中获取 BFILE 定位器。然后打开 BFILE,从 BFILE 的方法中获取 InputStream 并从中binaryStreamValue()读取数据。

这是一些示例代码(可以改进错误处理):

import java.io.*;
import java.sql.*;
import oracle.sql.BFILE;
import oracle.jdbc.OracleResultSet;

// ...

    // 'connection' here is your Oracle database connection.
    Statement stmt = connection.createStatement();
    OracleResultSet rSet = (OracleResultSet)stmt.executeQuery(
                                                 "SELECT bfile_loc FROM film");
    if (rSet.next()) {
        BFILE bfile = rSet.getBFILE(1);
        System.out.println("Length: " + bfile.length());
        bfile.open();
        InputStream is = bfile.binaryStreamValue();
        // Read data from input stream...
        is.close();
        bfile.close();
    }

在上面的代码中,我还获取了文件的长度,这不是必需的,但如果找不到文件,它将失败。

第三,您需要将 InputStream 转换为 ImageIcon。ImageIcon类有一个接受字节数组的构造函数,您可以使用此问题的答案将 InputStream 转换为字节数组。

于 2014-12-21T12:57:09.643 回答