//通过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);

}

}

}

存取算法 oracle,JAVA存取Oracle的BFile和LOBs相关推荐

  1. java搭配oracle,Java联接Oracle(高级篇)

    Java连接Oracle(高级篇) 在项目工程目录下新建一个config文件夹,在config文件夹里创建一个database.properties文件,配置相关Oracle数据库的driver.ur ...

  2. Oracle - java连接Oracle

    1.导入与Oracle版本相对应的ojdbc包 网上导入的教程都有,不过都是导入的ojdbc6,我装的Oracle版本是21c的,ojdbc6包并不能使用,这里使用的是ojdbc8的包,一定一定得注意 ...

  3. Java嵌入oracle,Java插入Oracle Spatial空间数据

    Java读取地理信息数据文件,并将其存入Oracle数据库. package file; import java.io.BufferedReader; import java.io.File; imp ...

  4. oracle 存long,ORACLE中LONG类型字段的存取

     Oracle中存取4000字节以上大文本类型可以用此数据类型,其在C#中的读写方法如下: 注意需要引用 System.Data.OracleClient 然后添加命名空间:using Syste ...

  5. oracle 存取图片,用ASP.NET 2.0在Oracle中存取图片(文件)的操作

    用ASP.NET 2.0在Oracle中存取图片(文件)的操作 2010-10-21文字大小:大中小 有时由于某种须要(如安全性)须将图片或文件存放在数据库中,当然通常情况下特别是文件比较大的时刻许多 ...

  6. oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限

    查询用户拥有的权限: 1.查看所有用户:select *from dba_users;select *from all_users;select *from user_users; 2.查看用户或角色 ...

  7. Oracle Java Mission Control:终极指南

    "我们喜欢关注Mikhail Vorontsov的博客,并获得他对Java Performance相关问题的看法. 我们曾多次被问到Takipi的Java错误分析与Java Mission ...

  8. Oracle JAVA SORCE and BLOB OBJECT

    较老得plsql不能处理与OS的交互,比如获得文件目录,获得文件的大小等等, plsql从9I开始支持javasource使用java处理OS交互. 例如 需求 :导入到指定目录下面所有的文件到数据库 ...

  9. oracle java rmi 漏洞,Oracle Java SE Java运行时环境RMI子组件远程漏洞(CVE-2011-3556)

    发布日期:2011-10-20 更新日期:2011-10-20 受影响系统: Oracle Sun JRE 1.6.x Oracle Sun JDK 1.6.x 不受影响系统: Oracle Sun ...

最新文章

  1. s-seq 生成序列化数字
  2. Mysql连接问题:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException
  3. 解析jsonarra_使用JSONReader或JSONObject / JSONArray解析JSON数据
  4. 事务连接中断_漫画——你还记得原生的JDBC怎么连接数据库吗?
  5. mysql服务器证书验证提供信任库_连接到MySQL数据库时有关SSL连接的警告
  6. SpringMVC的请求-获得请求参数-获得基本类型参数
  7. 每日一笑 | 为什么英语老师让我们养成背单词的习惯?
  8. c语言链表交换2个元素的位置,C语言 单链表 查找一个元素出现的所有位置
  9. 通过一个模拟程序让你明白ASP.NET MVC是如何运行的
  10. intellij IDEA 控制台中文乱码
  11. Flutter音频播放插件just_audio入门指南
  12. Flutter Fish-Redux插件入门指南
  13. 使用Hyperlegder Fabric体验区块链智能合约的乐趣----编写一个简单的BookstoreApp(上)...
  14. Excel画饼图(立体的哦)
  15. 分享ddwrt tomato路由器剔除信号质量差客户端的脚本
  16. 1.1.1 什么是程序?
  17. 精美UI静态界面欣赏
  18. 电阻何时取得最大功率
  19. 煮饭的机器人作文_炒菜机器人作文600字
  20. 认计算机电源,电脑硬件认识之什么是电脑的电源[图文]

热门文章

  1. 关于LINQ的模糊查询
  2. am4针脚定义_AMD AM4全新接口:支持DDR4-2933内存
  3. 6.7. 在 Heroku 上使用 PostgreSQL
  4. Linux 环境下实现投屏至ipad或iphone的方法(安卓同理)
  5. Ubuntu 编写程序输出到txt文件中
  6. 荣耀MagicBook锐龙系列新机操作教程分享 来看干货!
  7. 分析Ajax爬取今日头条,下载图片
  8. CCF BDCI“大数据平台安全事件检测与分类识别”赛题,奇点云夺冠
  9. 【机器学习】深度学习和卷积神经网络
  10. 《沟通的方法》笔记九:赞美