无法从Java中的Linux服务器(Oracle DB)检索BFILE数据

时间:2014-06-01 10:27:49

标签: java linux oracle

我正在尝试从安装在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数据吗?

table schema

1 个答案:

答案 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);    

如果这没有帮助,请将您的程序输出(崩溃前)添加到您的问题中。