Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Java中从Linux服务器(Oracle DB)检索B文件数据_Java_Linux_Oracle - Fatal编程技术网

无法在Java中从Linux服务器(Oracle DB)检索B文件数据

无法在Java中从Linux服务器(Oracle DB)检索B文件数据,java,linux,oracle,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

我正在尝试从安装在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数据库检索BFILE数据吗


为了在Oracle中成功创建B文件,请使用符号目录名:

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

如果没有帮助,请在问题中添加崩溃前程序的输出。

引发了什么异常?请将完整堆栈跟踪添加到您的问题中。此代码很奇怪:while rs2.next{bfile=oraclresultsetrs2.getBFILE 1;}。超出结果集的最后一行,然后访问上一行的文件。//PFB堆栈跟踪java.sql.SQLException:ORA-22285:oracle.jdbc.dbaccess.DBError.throwsqleexceptiondberror.java:134 at oracle.jdbc.ttc7.TTIoer.processErrorTTIoer.java:289 atoracle.jdbc.ttc7.v8TTIBfile.java:989在oracle.jdbc.ttc7.v8TTIBfile.doesExistv8TTIBfile.java:262在oracle.jdbc.ttc7.TTC7Protocol.fileexisttc7protocol.java:2869在oracle.sql.lobdaccessimpl.fileexistslobccessimpl.java:1060在oracle.sql.BFILE.fileExistsBFILE.java:502I可能在几天内获得OS访问权限,一旦我获得访问权限,我将检查它并让您知道。如果我遇到任何问题,我会在这里发布我的输出。