首先,为了创建一个有效的 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 转换为字节数组。