我正在尝试从安装在Linux服务器上的Oracle DB中检索图像。我已经打开了与Oracle DB的连接,并编写了下面的代码来读取图像文件:
String sqlQuery2 = "SELECT DOC_CONTENT FROM GES_TRV_ASSIST_VISA_IMG_INTF_V T WHERE T.TRV_REQ_NUM = ?";
pst2 = DBHelper.getPrepareStatement(sqlQuery2, "getPDFStreamData", con);
pst2.setInt(1, 1181241);
rs2 = DBHelper.executeQueryUsingPrepareStatement(pst2, "getPDFStreamData");
BufferedInputStream input = null;
while(rs2.next()){
bfile = ((OracleResultSet)rs2).getBFILE (1);
}
System.out.println("getDirAlias() = " + bfile.getDirAlias());
System.out.println("getName() = " + bfile.getName());
System.out.println("fileExists() = " + bfile.fileExists()); //Throwing exception here
System.out.println("isFileOpen() = " + bfile.isFileOpen());
// now open the bfile to get the data
bfile.openFile();
// get the BFILE data as a binary stream
InputStream in = bfile.getBinaryStream();
int length;
// read the bfile data in 6-byte chunks
byte[] buf = new byte[6];
while ((length = in.read(buf)) != -1)
{
// append and display the bfile data in 6-byte chunks
StringBuffer sb = new StringBuffer(length);
for (int i=0; i<length; i++)
sb.append( (char)buf[i] );
我能够检索目录名称和文件名但是它在bfile.fileExists()
处抛出异常,说文件不存在,但文件在提到的路径中。我已经关注了许多博客和教程,但没有结果。我在这里的疑问是我可以访问Oracle DB就够了吗?或者我是否也需要访问文件目录?
我附上了我的oracle表格图片以便更好地理解。有人可以建议我如何从oracle DB中检索BFILE数据吗?
答案 0 :(得分:0)
为了在Oracle中成功创建BFILE,您使用符号目录名称:
create or replace directory DOC_CONTENT_DIR as '/home/storage/docs';
grant read, write on DOC_CONTENT_DIR to user1;
insert into GES_TRV_ASSIST_VISA_IMG_INTF_V values(1, 3, 'US', BFILENAME('DOC_CONTENT_DIR', 'image.jpeg'), 'image.jpeg');
commit;
除了Oracle中的授权外,oracle用户还需要在操作系统级别上具有相应的访问权限:
chown oracle /home/storage/docs
此外,您需要解决此问题。这是错的:
while(rs2.next()){
bfile = ((OracleResultSet)rs2).getBFILE (1);
}
如果您希望结果中有一行,只需写下:
rs2.next();
bfile = ((OracleResultSet)rs2).getBFILE (1);
如果这没有帮助,请将您的程序输出(崩溃前)添加到您的问题中。