/*
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();
}
}
}
分享到:
相关推荐
`MSSQLUploader.java`文件可能包含实现与SQL Server 2000交互的代码,包括建立JDBC连接,使用PreparedStatement进行数据插入,并且可能使用CallableStatement调用存储过程来处理二进制数据。读取时,可以使用...
编程语言会提供API来处理二进制数据和SQL语句的执行。 5. **关闭连接**:操作完成后,记得关闭数据库连接,以释放资源。 取出图片显示的步骤: 1. **查询图片数据**:使用SELECT语句从数据库中获取图片的二进制...
- **创建表结构**:在SQL Server中,可以创建一个包含BLOB字段的表,如`ImagesTable`,包含一个名为`ImageData`的`varbinary(max)`字段,用于存储图片的二进制数据。 - **保存图片**:通过读取图片文件并将其转换...
图片文件如JPEG、PNG等,本质上就是一系列二进制数据。当这些图片数据存储在数据库中时,它们会被转化为二进制流,以便于数据库管理系统处理。 实现这个过程通常涉及以下步骤: 1. **连接数据库**:使用合适的...
在给定的代码示例中,展示了如何使用Java连接到Access 2010数据库并读取存储为二进制流的图片数据,然后将这些二进制流转换回图片文件。以下是对这个过程的详细解释: 首先,为了连接到Access数据库,我们需要引入...
标题中的“blob,将byte二进制转成pdf”指的是在IT领域中处理二进制数据(Blob)并将其转换为PDF文档的过程。Blob在计算机科学中通常代表Binary Large Object,用于存储大块非结构化的数据,如图像、音频、视频或者在...
同时,这种格式允许任何能够处理二进制数据的程序来读取和显示图片,而不受特定文件格式的限制。 二、数据库中的二进制数据模型 在关系型数据库中,如MySQL、Oracle或SQL Server,通常有特定的数据类型用于存储二...
首先,我们需要了解MYSQL存储大容量的二进制文件的格式是BLOB(Binary Large OBject),它可以存储大量的二进制数据,包括图片、音频、视频等。除了图片以外,BLOB还可以存储其他类型的二进制文件。 在将二进制文件...
例如,Java中可以使用`ServletOutputStream`将二进制数据发送到HTTP响应,浏览器接收到后可以正确解析为图片。 在实际应用中,我们还需要考虑性能优化,比如使用流式处理减少内存占用,以及安全性问题,如防止SQL...
在Java中,我们可以使用`java.io.InputStream`和`java.io.OutputStream`来处理二进制流。 在Spring MVC项目中,处理图片转二进制流的步骤通常包括以下几个部分: 1. **前端上传**:用户通过网页上传图片,Spring ...
这篇文章将深入探讨如何在数据库中处理二进制图片,并提供一种显示它们的方法,供学习者参考。 首先,我们要理解图片本质上是二进制数据,通常以.jpg、.png或.gif等格式存在。这些文件由一系列0和1组成,代表图像的...
在MySQL数据库中存储二进制大对象(BLOB)数据,如图片,是常见的做法,因为这种方式便于管理和检索。在本示例中,我们将探讨如何查询包含二进制图片数据的MySQL数据库,并通过JSP(JavaServer Pages)展示这些图片...
本资源“商业编程-源码-使用流对二进制大对象进行读写.zip”提供了一种利用流技术处理二进制大对象的方法,这在Java或.NET等面向对象编程语言中是非常实用的技术。 首先,我们需要理解什么是二进制大对象。二进制大...
值得注意的是,为了提高性能和避免内存问题,处理大型BLOB数据时,通常不建议一次性加载整个二进制数据到内存。可以使用流式处理技术,如Oracle的`Blob.getBinaryStream()`方法,以流的方式读取和写入数据。 标签...
- **BLOB** 类型用于存储二进制数据,有TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB四种,分别可以存储不同大小的二进制数据。 - **TEXT** 类型则用于存储非二进制的大文本数据,有TINYTEXT、TEXT、MEDIUMTEXT和LONG...
- **数据分片**:ShardingSphere-JDBC支持基于数据分片的水平扩展,通过将大表拆分成多个小表,分布于不同的数据库实例上,从而提高查询和处理性能。它可以根据业务需求进行分片策略配置,如按时间、范围、哈希值等...
基于存储过程的MySQL数据库BLOB字段访问是指在MySQL数据库中使用存储过程来访问和处理二进制数据的方法。这种方法可以使得数据库的二进制数据处理变得更加方便和高效。 MySQL数据库提供了BLOB数据类型,可以用来...
2. **将二进制流写入数据库**: 描述如何使用JDBC连接数据库并将二进制流数据插入到指定表中。 3. **从数据库读取二进制流并展示**: 讲解如何查询数据库中的二进制流数据,并在HTML页面上进行展示的方法。 #### 二、...
综上所述,从SQL数据库中读取二进制图片并生成本地文件是一项常见的任务,涉及数据库操作、二进制数据处理和文件I/O。通过理解这些基本概念和技术,你可以有效地管理和利用存储在数据库中的图像资源。在给定的压缩包...
这个“apache-activemq-5.15.15二进制包,安装包”包含了运行和配置ActiveMQ所需的所有组件,方便用户在本地计算机或服务器上快速部署和使用。该版本5.15.15是Apache ActiveMQ的一个稳定版本,提供了许多增强的功能...