oracle的java类文件怎么取出来,JAVA存取Oracle的BFile和LOBs

//通过JDBC从oracle里面取BFile(LOB)类型数据存储到磁盘

/**

*

* @author Liu Yuanyuan

*/

Private void getBFile()

{

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

try

{

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@127.0.0.1 :1521:orcl";

Class.forName(driver);

System.out.println("class");

conn = DriverManager.getConnection(url, "lyy", "lyy");

System.out.println("connect");

stmt = conn.createStatement();

String sql = "select files from lyy.filetable";

rs = stmt.executeQuery(sql);

System.out.println("sql="+sql);

while (rs.next())

{ System.out.println(rs.getMetaData().getColumnTypeName(1));

BFILE b = (BFILE)rs.getObject(1);// BLOB b = (BLOB)rs.getObject(1);

OutputStream ops = null;

InputStream ips = null;

File file = new File("e:"+File.separator+b.getName());//getName() only for BFILE

try

{

System.out.println("isFileExist = "+b.fileExists());//fileExists() only for BFILE

//For BFILE,must open File,and close File after its operation

//for BLOB,needn’t openFile() and closeFile()

b.openFile();

ips = b.getBinaryStream();

byte[] buffer =new byte[b.getBytes().length];//

ops = new FileOutputStream(file);

//将文件写到硬盘

for (int i; (i = ips.read(buffer)) > 0;)

{

ops.write(buffer, 0, i);

ops.flush();

}

b.closeFile();

}

catch (Exception ex)

{

ex.printStackTrace(System.out);

}

finally

{

ips.close();

ops.close();

}

}

}

catch (Exception ex)

{

ex.printStackTrace(System.out);

}

finally

{

try

{

if(rs!=null)

{

rs.close();

}

if(stmt!=null)

{

stmt.close();

}

if(conn!=null)

{

conn.close();

}

}

catch (SQLException ex)

{

ex.printStackTrace(System.out);

}

}

}

常见错误:

ORA-22925 getting large LOB via JDBC Thin 11.2

This problem is introduced in JDBC 11.2.Read of a LOB above 2GB in size can fail in JDBC Thin in 11.2 .

也就是说对于通过JDBC读取的LOB值的上限是2G。

//将硬盘上的直接文件存入Oracle(BFile或者BLOB)

注:直接存文件对文件大小有一定限制,查处后会内存溢出,稍后将介绍for update的方法

Private void insertBinary()

{

String driver = "oracle.jdbc.driver.OracleDriver";

String url = "jdbc:oracle:thin:@127.0.0.1 :1521:orcl";

Connection conn = null;

PreparedStatement ps = null;

try

{

Class.forName(driver);

System.out.println("success find class");

conn = DriverManager.getConnection(url, "lyy", "lyy");

System.out.println("success connect");

String sql = "insert into rawtable(id,obj) values(?,?)";

ps = conn.prepareStatement(sql);

ps.setInt(1, 1122);

//设置二进制BLOB参数

File file = new File("d:\\lyy.txt");

InputStream is = new FileInputStream(file);

ps.setBinaryStream(2, is, (int) file.length());

//设置二进制CLOB参数

// File file_clob = new File("c:\\a.txt");

//InputStreamReader reader = new InputStreamReader(new FileInputStream(file_clob));

// ps.setCharacterStream(3, reader, (int) file_clob.length());

ps.executeUpdate();

is.close();

}

catch (Exception ex)

{

ex.printStackTrace(System.out);

}

finally

{

try

{

if(ps!=null)

ps.close();

if(conn!=null)

conn.close();

}

catch (SQLException ex)

{

Logger.getLogger(GetBlob.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将本地的 XML 文件更新到 Oracle 数据库中的 BLOB 字段,你可以按照以下步骤进行操作: 1. 首先,确保已经创建包含 BLOB 字段的数据表或已有的表中已添加 BLOB 字段。 ```sql CREATE TABLE my_table ( id NUMBER, xml_blob BLOB ); ``` 2. 使用 PL/SQL 块或 SQL 语句将本地的 XML 文件更新到 BLOB 字段。 使用 PL/SQL 块的示例: ```sql DECLARE l_blob BLOB; l_blob_length NUMBER; l_xml_clob CLOB; l_xml_file BFILE; BEGIN -- 将 XML 文件加载到 BFILE 对象 l_xml_file := BFILENAME('DIRECTORY_NAME', 'file.xml'); -- 将 BFILE 对象打开为只读模式 DBMS_LOB.fileopen(l_xml_file, DBMS_LOB.file_readonly); -- 获取 BFILE 对象的长度 l_blob_length := DBMS_LOB.getlength(l_xml_file); -- 创建临时 BLOB 对象 DBMS_LOB.createtemporary(l_blob, TRUE); -- 将 BFILE 数据复制到 BLOB 对象 DBMS_LOB.loadfromfile(l_blob, l_xml_file, l_blob_length); -- 更新表中的记录 UPDATE my_table SET xml_blob = l_blob WHERE id = 1; -- 关闭和释放 BFILE 对象 DBMS_LOB.fileclose(l_xml_file); DBMS_LOB.freetemporary(l_blob); COMMIT; END; / ``` 使用 SQL 语句的示例: ```sql DECLARE l_blob BLOB; BEGIN -- 将 XML 文件加载到 BFILE 对象 SELECT BFILENAME('DIRECTORY_NAME', 'file.xml') INTO l_blob FROM dual; -- 更新表中的记录 UPDATE my_table SET xml_blob = l_blob WHERE id = 1; COMMIT; END; / ``` 在上述示例中,请将 'DIRECTORY_NAME' 替换为在 Oracle 数据库中创建的目录对象名称,该目录对象指向存储 XML 文件的目录。确保在操作 BLOB 字段时进行适当的事务管理和异常处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值