我的桌面上有'osta.jpg'图片,我想将它添加到我的数据库Oracle SQL中,然后从Java应用程序(JDBC)中的数据库加载这张图片,并在标签上显示JLabel lblFilm = new JLabel(new ImageIcon( "picture_from_SQL")
( Swing library)
我尝试将图片添加到数据库:
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应用程序中加载它。
答案 0 :(得分:0)
首先,为了创建有效的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的binaryStreamValue()
方法中获取一个InputStream并从中读取数据。
这里有一些示例代码(可以改进错误处理):
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类有一个构造函数,它接受一个字节数组,您可以使用answers to this question将InputStream转换为字节数组。