【问题标题】:Writing an ORACLE BLOB file in java在 Java 中编写 ORACLE BLOB 文件
【发布时间】:2016-02-22 12:37:33
【问题描述】:

我将一个 html 文件从我的 D 驱动器上传到 ORACLE 数据库,现在我正在尝试用新名称将相同的文件检索到我电脑中的另一个驱动器,但我无法接收完全相同的文件,代码我用过的如下。 我的问题是如何获得与我存储在数据库中的文件相同的副本。

import java.io.FileWriter;

import java.io.FileWriter;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class RBLOB {
public static void main(String args[])throws Exception
{
try(Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");)
{
PreparedStatement ps=con.prepareStatement("select * from players");
ResultSet rs=ps.executeQuery();
rs.next();
InputStream is= rs.getBinaryStream(2);

FileWriter fw=new FileWriter("C:\\Users\\y_san\\Desktop\\test.html");
while(is.read()!=-1)
{
  fw.write(is.read());
 System.out.println(is.read());
 fw.flush();
}
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
}

【问题讨论】:

    标签: java oracle11g blob


    【解决方案1】:

    您在此处读取的字节数

      while(is.read()!=-1) 
    

    永远不会在 File 或 out 中显示,因为您已经读取了下一个字节并将其写出。

    while(is.read()!=-1) { // byte 1 read
    fw.write(is.read());  // byte 2 read     
    System.out.println(is.read()); // byte 3 read
    

    尝试读入一个字节数组并写出读取的字节数

       byte [] buf = new byte [1024];
       int len = is.read(buf);
       while (len > 0){
           fw.write (buf,0,len);
            // more stuff
    
            // read next chunk
           len = is.read(buf);
        }
    

    【讨论】:

    • 是的..我明白了,谢谢你
    • -我也用 File 和 FileOutputStream 替换了我的 FileWriter,因为 File Writer 不支持写入字节。
    猜你喜欢
    • 2013-12-04
    • 2015-01-29
    • 2018-08-13
    • 2020-05-28
    • 2011-11-19
    • 2013-09-02
    • 1970-01-01
    • 2020-04-03
    相关资源
    最近更新 更多