`
starbhhc
  • 浏览: 654487 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

使用JDBC处理二进制数据

阅读更多
/*  
 
Database Programming with JDBC and Java, Second Edition  
By George Reese  
ISBN: 1-56592-616-1  
 
Publisher: O'Reilly  
 
*/  
  
  
import java.io.BufferedOutputStream;   
import java.io.File;   
import java.io.FileInputStream;   
import java.io.FileOutputStream;   
import java.sql.Blob;   
import java.sql.Connection;   
import java.sql.DriverManager;   
import java.sql.PreparedStatement;   
import java.sql.ResultSet;   
  
/**  
* Example 4.2.  
*/  
public class Blobs {   
  public static void main(String args[]) {   
    if (args.length != 1) {   
      System.err.println("Syntax: <java Blobs [driver] [url] "  
          + "[uid] [pass] [file]");   
      return;   
    }   
    try {   
      Class.forName(args[0]).newInstance();   
      Connection con = DriverManager.getConnection(args[1], args[2],   
          args[3]);   
      File f = new File(args[4]);   
      PreparedStatement stmt;   
  
      if (!f.exists()) {   
        // if the file does not exist   
        // retrieve it from the database and write it to the named file   
        ResultSet rs;   
  
        stmt = con.prepareStatement("SELECT blobData "  
            + "FROM BlobTest " + "WHERE fileName = ?");   
  
        stmt.setString(1, args[0]);   
        rs = stmt.executeQuery();   
        if (!rs.next()) {   
          System.out.println("No such file stored.");   
        } else {   
          Blob b = rs.getBlob(1);   
          BufferedOutputStream os;   
  
          os = new BufferedOutputStream(new FileOutputStream(f));   
          os.write(b.getBytes(0, (int) b.length()), 0, (int) b   
              .length());   
          os.flush();   
          os.close();   
        }   
      } else {   
        // otherwise read it and save it to the database   
        FileInputStream fis = new FileInputStream(f);   
        byte[] tmp = new byte[1024];   
        byte[] data = null;   
        int sz, len = 0;   
  
        while ((sz = fis.read(tmp)) != -1) {   
          if (data == null) {   
            len = sz;   
            data = tmp;   
          } else {   
            byte[] narr;   
            int nlen;   
  
            nlen = len + sz;   
            narr = new byte[nlen];   
            System.arraycopy(data, 0, narr, 0, len);   
            System.arraycopy(tmp, 0, narr, len, sz);   
            data = narr;   
            len = nlen;   
          }   
        }   
        if (len != data.length) {   
          byte[] narr = new byte[len];   
  
          System.arraycopy(data, 0, narr, 0, len);   
          data = narr;   
        }   
        stmt = con.prepareStatement("INSERT INTO BlobTest(fileName, "  
            + "blobData) VALUES(?, ?)");   
        stmt.setString(1, args[0]);   
        stmt.setObject(2, data);   
        stmt.executeUpdate();   
        f.delete();   
      }   
      con.close();   
    } catch (Exception e) {   
      e.printStackTrace();   
    }   
  }   
}   
分享到:
评论

相关推荐

    Oracle,SQL2000,MYSQL存取图片或二进制数据的功能文件

    `MSSQLUploader.java`文件可能包含实现与SQL Server 2000交互的代码,包括建立JDBC连接,使用PreparedStatement进行数据插入,并且可能使用CallableStatement调用存储过程来处理二进制数据。读取时,可以使用...

    图片以二进制存取数据库

    编程语言会提供API来处理二进制数据和SQL语句的执行。 5. **关闭连接**:操作完成后,记得关闭数据库连接,以释放资源。 取出图片显示的步骤: 1. **查询图片数据**:使用SELECT语句从数据库中获取图片的二进制...

    SqlServer与Oracle保存与读取图片二进制流

    - **创建表结构**:在SQL Server中,可以创建一个包含BLOB字段的表,如`ImagesTable`,包含一个名为`ImageData`的`varbinary(max)`字段,用于存储图片的二进制数据。 - **保存图片**:通过读取图片文件并将其转换...

    实现数据库二进制流转换成图片保存本地

    图片文件如JPEG、PNG等,本质上就是一系列二进制数据。当这些图片数据存储在数据库中时,它们会被转化为二进制流,以便于数据库管理系统处理。 实现这个过程通常涉及以下步骤: 1. **连接数据库**:使用合适的...

    java连接Access2010读取图片二进制

    在给定的代码示例中,展示了如何使用Java连接到Access 2010数据库并读取存储为二进制流的图片数据,然后将这些二进制流转换回图片文件。以下是对这个过程的详细解释: 首先,为了连接到Access数据库,我们需要引入...

    blob,将byte二进制转成pdf

    标题中的“blob,将byte二进制转成pdf”指的是在IT领域中处理二进制数据(Blob)并将其转换为PDF文档的过程。Blob在计算机科学中通常代表Binary Large Object,用于存储大块非结构化的数据,如图像、音频、视频或者在...

    从数据库中读取二进制图片

    同时,这种格式允许任何能够处理二进制数据的程序来读取和显示图片,而不受特定文件格式的限制。 二、数据库中的二进制数据模型 在关系型数据库中,如MySQL、Oracle或SQL Server,通常有特定的数据类型用于存储二...

    如何向MYSQL中写入二进制文件

    首先,我们需要了解MYSQL存储大容量的二进制文件的格式是BLOB(Binary Large OBject),它可以存储大量的二进制数据,包括图片、音频、视频等。除了图片以外,BLOB还可以存储其他类型的二进制文件。 在将二进制文件...

    将图片存放进数据库(转换成二进制流)

    例如,Java中可以使用`ServletOutputStream`将二进制数据发送到HTTP响应,浏览器接收到后可以正确解析为图片。 在实际应用中,我们还需要考虑性能优化,比如使用流式处理减少内存占用,以及安全性问题,如防止SQL...

    springMvc+Oracle的图片转二进制流

    在Java中,我们可以使用`java.io.InputStream`和`java.io.OutputStream`来处理二进制流。 在Spring MVC项目中,处理图片转二进制流的步骤通常包括以下几个部分: 1. **前端上传**:用户通过网页上传图片,Spring ...

    数据库读取二进制图片显示

    这篇文章将深入探讨如何在数据库中处理二进制图片,并提供一种显示它们的方法,供学习者参考。 首先,我们要理解图片本质上是二进制数据,通常以.jpg、.png或.gif等格式存在。这些文件由一系列0和1组成,代表图像的...

    查询mysql数据库中的二进制图片数据,并全部显示出来

    在MySQL数据库中存储二进制大对象(BLOB)数据,如图片,是常见的做法,因为这种方式便于管理和检索。在本示例中,我们将探讨如何查询包含二进制图片数据的MySQL数据库,并通过JSP(JavaServer Pages)展示这些图片...

    商业编程-源码-使用流对二进制大对象进行读写.zip

    本资源“商业编程-源码-使用流对二进制大对象进行读写.zip”提供了一种利用流技术处理二进制大对象的方法,这在Java或.NET等面向对象编程语言中是非常实用的技术。 首先,我们需要理解什么是二进制大对象。二进制大...

    图片以二进制保存到Oracle,取出并显示到页面示例

    值得注意的是,为了提高性能和避免内存问题,处理大型BLOB数据时,通常不建议一次性加载整个二进制数据到内存。可以使用流式处理技术,如Oracle的`Blob.getBinaryStream()`方法,以流的方式读取和写入数据。 标签...

    MySQL存取大文本及二进制文件(图片)

    - **BLOB** 类型用于存储二进制数据,有TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB四种,分别可以存储不同大小的二进制数据。 - **TEXT** 类型则用于存储非二进制的大文本数据,有TINYTEXT、TEXT、MEDIUMTEXT和LONG...

    shardingsphere-jdbc-5.0.0-beta依赖包

    - **数据分片**:ShardingSphere-JDBC支持基于数据分片的水平扩展,通过将大表拆分成多个小表,分布于不同的数据库实例上,从而提高查询和处理性能。它可以根据业务需求进行分片策略配置,如按时间、范围、哈希值等...

    基于存储过程的MySQL数据库BLOB字段访问.pdf

    基于存储过程的MySQL数据库BLOB字段访问是指在MySQL数据库中使用存储过程来访问和处理二进制数据的方法。这种方法可以使得数据库的二进制数据处理变得更加方便和高效。 MySQL数据库提供了BLOB数据类型,可以用来...

    图片转流存库和读取二进制流页面展示

    2. **将二进制流写入数据库**: 描述如何使用JDBC连接数据库并将二进制流数据插入到指定表中。 3. **从数据库读取二进制流并展示**: 讲解如何查询数据库中的二进制流数据,并在HTML页面上进行展示的方法。 #### 二、...

    ReadImages_sourcel1r_dieq2j_读取SQL数据库二进制图片_

    综上所述,从SQL数据库中读取二进制图片并生成本地文件是一项常见的任务,涉及数据库操作、二进制数据处理和文件I/O。通过理解这些基本概念和技术,你可以有效地管理和利用存储在数据库中的图像资源。在给定的压缩包...

    apache-activemq-5.15.15二进制包,安装包

    这个“apache-activemq-5.15.15二进制包,安装包”包含了运行和配置ActiveMQ所需的所有组件,方便用户在本地计算机或服务器上快速部署和使用。该版本5.15.15是Apache ActiveMQ的一个稳定版本,提供了许多增强的功能...

Global site tag (gtag.js) - Google Analytics