当前位置:  技术问答>java相关

我读数据库中的二进制数据时,为什么不能关呢?

    来源: 互联网  发布时间:2017-04-21

    本文导语:  我读数据库中的二进制数据图片时,为什么不能关呢? ............. InputStream input=rs.getBinaryStream(1); pstmt.close(); rs.close(); 如果我pstmt/rs.close()的话,不能得到数据,编译通过,执行不能, 如果我不关的话,就可以得到数...

我读数据库中的二进制数据图片时,为什么不能关呢?
.............
InputStream input=rs.getBinaryStream(1);
pstmt.close();
rs.close();
如果我pstmt/rs.close()的话,不能得到数据,编译通过,执行不能,
如果我不关的话,就可以得到数据,?这是为什么呢?

如果我把input.read(bytes);放到字节数组中就没有问题拉
ImageIcon ico=new ImageIcon(bytes);pstmt/rs.close()关掉也没有问题,?


|
在 Postgres里,大对象 (也称之为 BLOB)用于保存那些无法在通常 SQL 表里面保存的数据.它们是以一种特殊的格式存储在一个独立的 表里面的,然后用一个 OID 值从你自己的表里面引用. 

Important: 对于 Postgres ,你必须在一个 SQL 事务里面访问大对象。 你应该带着一个输入参数false使用 setAutoCommit() 方法打开一个事务: 

Connection mycon;
...
mycon.setAutoCommit(false);
... // now use Large Objects

目前,你有两种使用大对象的方法.第一种是标准的 JDBC 方式,这个方式在这里有文档. 另一种,使用 PostgreSQL 对该(JDBC)API (编程接口)的扩展, 也是一种用于 Java 的 libpq 大对象 API 的形式, 提供了一种比标准方法更好的访问大对象的访问方法. 在系统内部,该驱动使用这种扩展来提供大对象支持. 

在 JDBC里, 标准的访问大对象的方法是使用ResultSet里的 getBinaryStream()方法, 和 PreparedStatement 里的 setBinaryStream()方法. 这些方法把大对象表示成 Java 的流(stream), 允许你用java.io和其他的包来操纵这些对象. Example 8-2 演示了这个方法. 

Example 8-2. 使用 JDBC 大对象接口

例如,假设你有一个包含一幅图象文件名的表,而且一个大对象包含这个图象: 

CREATE TABLE images (imgname text, imgoid oid);

要插入一幅图象,你可以: 

File file = new File("myimage.gif");
FileInputStream fis = new FileInputStream(file);
PreparedStatement ps = conn.prepareStatement("INSERT INTO images VALUES (?, ?)"); (1)
ps.setString(1, file.getName());
ps.setBinaryStream(2, fis, file.length());
ps.executeUpdate();
ps.close();
fis.close();
(1)
问好必须是逐字出现.实际的书局由下面的行替换进去. 
setBinaryStream 从一个字串里把一定数量的 字节转换成一个大对象,然后把其 OID 保存到那个保存指向它的引用的 字段里.请注意,在数据库里大对象本身的创建是透明的. 

检索一幅图象甚至更容易(我在这里使用PreparedStatement, 当然用Statement也是一样的): 

PreparedStatement ps = con.prepareStatement("SELECT oid FROM images WHERE name=?");
ps.setString(1, "myimage.gif");
ResultSet rs = ps.executeQuery();
if (rs != null) {
    while(rs.next()) {
        InputStream is = rs.getBinaryInputStream(1);
        // use the stream in some way here
        is.close();
    }
    rs.close();
}
ps.close();

这里你可以看到这里大对象是当做一个InputStream(输入流)检索的. 你还会注意到我们在处理结果的下一行之前关闭了流. 这是 JDBC 规范的一部分, 该规范指出任何返回的InputStream在调用 ResultSet.next()或 ResultSet.close() 后都要被关闭. 


|
http://laser.zhengmai.com.cn/pgsqldoc-7.1c/jdbc-lo.html的文档。

|
你的可能是关的顺序的毛病,先rs.close();后pstm.close();

|
应该先rs.close();再pstm.close()才对的.

    
 
 

您可能感兴趣的文章:

  • 基于Key-Value的NOSQL数据库Redis的数据结构及常用相关命令介绍
  • 如何监控数据库的数据,如果数据库数据更改,就通知Server
  • 文档数据库mongodb与列式数据库hbase详细比较
  • 如何从数据库中或文本文件中提取数据到另一个数据库中?
  • SQL Server 2008如何进行数据库分离和附加详细介绍
  • 用JDBC连接Oracle数据库时,如何向数据库中写日期型数据(格式)?谢了!
  • nosql数据库levedb介绍及levedb最新版1.18下载安装
  • 我从JSP页将数据插入到oracle数据库中,为何汉字插入后数据库中显示为乱码呢?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 散分:Jbuilder6开发数据库应用请问你们都用什么数据库? 免费的数据库有那些?
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 数据在页面写不进数据库,也不可以从数据库中读出是什么原因?
  • ORACLE数据库常用字段数据类型介绍
  • mysql 本地数据库如何从远程数据库导数据
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 公司要给客户做报表,从数据库返回数据,他们死活要返回的格式为Excel格式,请问我怎样才能把数据库返回的数据存为Excel的格式?
  • 删除数据库中重复记录方法介绍及代码参考
  • 开发java下的数据库程序,用什么数据库引擎?
  • Mongodb数据库服务的开启与关闭详细介绍
  • 请问各位朋友:在JAVA的数据库应用管理系统中,如何不在操作系统忠建立数据源便能连接数据库(如ACCESS、MS SQL 等等
  • 如何实现 coreos 下Docker 与分布式数据库结合
  • sql 语句 取数据库服务器上所有数据库的名字
  • 请赐教;怎样将oracle数据库中的二进制数据输出到网页-急!!!!
  • 如何用jsp读取数据库中的二进制图象
  • 如何将数据库中的二进制的流文件还原回来?
  • asp.net 文件上传、下载(二进制流保存到数据库)的代码
  • 利用JDBC-ODBC能不能向数据库中存储二进制数据
  • mysql二进制日志文件恢复数据库
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 救急!Linux下WAS4.0不能启动(DB2 数据库也不能启动)
  • sql数据库不能直接用instr函数
  • RpM数据库丢失不能安装软件怎么恢复阿?
  • 数据库不能更新
  • 我不小心用mysqlfront把一个mysql数据库删除了,能不能恢复(没有备份),大家一定要救我阿。
  • 数据库的汉字怎么不能显示?
  • 急!我的db2怎么不能创建数据库?
  • 中文问题:我的数据库中,中文写入没有问题,但中文却不能正常读出。(sqlserver2000)
  • 对象序列化--存储数据库的方法 序列化后 不能使用
  • 各位老大,现在嵌入式数据库都有哪些啊,我的设备配置如下,不知能不能装个数据库呢?
  • 紧急求助,我的程序连接数据库时,用localhost完全正常,而外部可以访问,但不能访问连接数据的那部分
  • 我的小应用,为什么不能访问服务器的文本文件和连接数据库呀,说什么禁止了。我该怎么办呀?
  • 为什么我买的正版《大本营Java》不能下载新的数据库文件啊??????
  • 如何实现在java界面程序中向数据库添加记录,能不能给你例子??
  • 【求助】RHEL5.1 下安装Oracle 10.2g出现问题:指定数据库方案口令后卡住了,不能安装
  • 为什么我通过jdbc-odbc桥连接到access数据库的时候resultset只能向后移不能前移或作其它移动???
  • 在RedHat Advance Server下安装Oracle9i R2不能创建数据库问题
  • 请问:在用proc方式往数据库插入数据时,我能不能定义一个结构体,它与表的每一项对应,将结构体赋好值后,再只将这个结构体插入表中,这行不行啊?
  • 我执行crontab 时为什么不能连db2数据库
  • 是不是在applet里面不能访问数据库阿?能访问的话,怎么访问?要什么特别的处理吗?100分!
  • sql数据库如何查询修改数据库恢复模式?
  • 应该怎么样将一个对象放入到数据库里?还有怎么将图片放进数据库?急~~
  • sql server 2005删除用户时“数据库主体在该数据库中拥有架构,无法删除”错误的解决办法
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • 使用php语句将数据库*.sql文件导入数据库
  • sql数据库修改数据库用户
  • java数据库连接池和数据库连接示例
  • 对数据库的查询结果resultset进行修改后,怎么将修改的信息传回给数据库
  • java中的数据库结果集可以被赋值吗,可以通过结果集的方法来更新数据库字段吗?
  • 请教在linux系统开发环境下,有没有db和dbf数据库引擎,如何使用这个数据库?
  • 手把手教你Oracle数据库导出数据库结构到PowerDesigner


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3