import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.SQLException;
/*
* 建数据表
create table IMAGE_TAB
(
IMG_ID VARCHAR2(2),
IMAGE BLOB
)
*/
/**
*
* @author wulihai
*/
public class test {
Connection conn = null;
public test(){
conn=DBUtil.getConn();
}
public void write(String file) throws SQLException, IOException{
java.sql.Statement stmt = null;
java.sql.Statement stmt2 = null;
java.sql.ResultSet rs = null;
conn.setAutoCommit(false);
String sql = "insert into image_tab(img_id,image) values(1,empty_blob())";
stmt = conn.createStatement();
stmt.executeUpdate(sql);
String sql2 = "select image from image_tab where img_id = 1 for update";
stmt2 = conn.createStatement();
rs = stmt2.executeQuery(sql2);
if(rs.next()){
oracle.sql.BLOB b = (oracle.sql.BLOB)rs.getBlob(1);
java.io.OutputStream os = b.getBinaryOutputStream();
java.io.InputStream is = new java.io.FileInputStream(file);
int i = 0;
while((i = is.read()) != -1){
os.write(i);
}
conn.commit();
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
System.out.println("写数据成功!");
}
}
private void read(String file) throws SQLException, IOException {
java.sql.Statement stmt = null;
java.sql.ResultSet rs = null;
String sql = "select image from image_tab where img_id=1 ";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if(rs.next()){
oracle.sql.BLOB b = (oracle.sql.BLOB)rs.getBlob(1);
java.io.InputStream is = b.getBinaryStream();
java.io.FileOutputStream fos = new java.io.FileOutputStream(file);
int i = 0;
while((i = is.read())!= -1){
fos.write(i);
}
if(fos!=null){
fos.close();
}
if(is!=null){
is.close();
}
}
}
private void update(String file) {
java.sql.Statement stmt = null;
java.sql.ResultSet rs = null;
OutputStream os=null;
InputStream is=null;
try {
conn.setAutoCommit(false);
stmt=conn.createStatement();
rs=stmt.executeQuery("select image from image_tab where img_id=1 for update");
if(rs.next()){
oracle.sql.BLOB b = (oracle.sql.BLOB)rs.getBlob(1);
os = b.getBinaryOutputStream();
is = new java.io.FileInputStream(file);
int i = 0;
while((i = is.read()) != -1){
os.write(i);
}
System.out.println("写数据成功!");
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[]) throws SQLException, IOException{
test er=new test();
er.write("D:\\wulihai\\合影.jpg");//读取文件系统,写blob
er.read("D:\\wulihai\\合影2.jpg");//读取blob,写文件系统
er.update("D:\\wulihai\\写给亲爱的猪.doc");//读取文件系统,更新blob
er.read("D:\\wulihai\\写给亲爱的猪2.doc");//再次读取blob,写文件系统
}
}
分享到:
相关推荐
Oracle数据库中的BLOB(Binary Large Object)字段是用来存储大量二进制数据的,例如图片、文档或音频文件。在Delphi编程环境中,处理这类数据时需要掌握特定的API调用和方法。本篇文章将深入探讨如何在Delphi中对...
BLOB(Binary Large Object)字段是数据库系统中用来存储大量二进制数据的类型,非常适合图像、音频或视频文件。 首先,理解BLOB字段的工作原理至关重要。BLOB字段可以存储任意大小的二进制数据,而不像传统的字符...
Blob字段用于存储大对象,如图片、视频或二进制文件。在C#中,我们使用`OracleDbType.Blob`类型来处理Blob字段。读取Blob字段时,可以创建一个`OracleBinary`对象,然后使用`GetValue`方法获取Blob数据。写入Blob...
- **创建表结构**:Oracle提供`BLOB`类型来存储二进制数据。创建`ImagesTable`,包含一个`BLOB`类型的`ImageBlob`字段。 - **保存图片**:类似于SQL Server,将图片读取为字节数组,然后使用`PL/SQL`过程或Java的...
在Oracle中,BLOB用于存储二进制数据,如照片;而在MySQL中,BLOB也有类似的分类,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,分别适用于不同大小的二进制数据。 从Oracle中提取BLOB照片的步骤如下: 1. **查询...
总之,将Spring MVC与Oracle结合,处理图片二进制流,需要理解二进制流的概念,掌握文件读写、数据库操作以及Spring MVC的Controller和Service层处理逻辑。通过以上步骤,可以实现图片的上传、存储和展示,使得图片...
Oracle数据库在存储大对象(BLOB)数据时,提供了高效且灵活的方式,使得二进制数据如图片、文档等能够安全地保存在数据库中。批量导出Oracle数据库中的BLOB字段生成图片,是一项常见的需求,尤其对于那些需要将...
在数据库系统中,二进制大对象(Binary Large Object,简称BLOB)是一种用于存储大量二进制数据的数据类型,例如图像、音频或视频文件等。Oracle数据库支持Blob类型,允许用户在数据库中直接存储和管理这些大型文件。...
Blob类型则用于存储非结构化的二进制数据,如图片、音频文件或PDF文档。由于这些数据量大,常规的SQL查询可能无法有效处理,因此需要专门的工具来提高效率。 在提供的压缩包文件中,我们可以看到以下几个关键组件:...
* ORACLE数据库的BLOB字段可以存储大量的二进制数据,且性能优于LONG字段。 知识点3:坐标点的存储和读取 * 在ORACLE数据库中,坐标点被存储在BLOB字段中。 * 使用JSP技术可以读取BLOB字段中的坐标点,然后将其...
BLOB 类型通常用于存储大量二进制数据,如图片、音频或视频文件。本篇文章将深入探讨如何在 Oracle 数据库与基于 WebLogic 的应用中读写 BLOB 数据。 首先,Oracle 数据库提供了多种操作 BLOB 值的方法。在 SQL ...
在Oracle中,BLOB用于存储大量的二进制数据,如图像文件。与传统的文本或数字字段不同,BLOB字段有自己的游标(Cursor),这使得直接写入数据变得复杂。为了写入BLOB数据,首先需要创建一个空的BLOB实例,然后获取这...
而BFILE类型则允许将二进制文件存储在数据库外部的操作系统文件中。BFILE类型提供了一个定位器,指向服务器文件系统上的文件,最大支持4GB的文件。 在实际操作中,可以通过PL/SQL的DBMS_LOB包进行读写操作,包括...
总之,数据库读取和显示二进制图片是一个涉及多方面技术的问题,包括数据库设计、数据读写、图片处理和Web应用开发。理解这个过程有助于提升你在开发中的综合能力。通过实践和学习,你可以更好地掌握这些技能,为你...
Oracle提供了高效的流式读写接口,如`OracleBlob`的`getBinaryStream`和`setBinaryStream`方法,可以按需读取或写入数据,减少内存消耗。 另外,为了提高性能和降低网络传输成本,我们还可以考虑使用Oracle的LOB...
在数据库操作中,如Oracle、SQL Server等支持BLOB(Binary Large OBject)字段,允许存储二进制大对象。Java的JDBC和.NET的ADO.NET都提供了处理BLOB的方法,通过流接口可以直接读写数据库中的大对象,无需先将其全部...
- **数据长度**:两者都支持最大4GB的数据存储,但`CLOB`通常用于存储文本,而`BLOB`用于存储图像或其他二进制文件。 - **编码**:`CLOB`可以使用不同的字符集编码(如UTF-8),而`BLOB`则是纯粹的二进制数据,没有...
对于Blob数据类型,通常用于存储图片、音频、视频等二进制文件。以下是一个简单的示例,演示如何使用ADO.NET在Oracle数据库中读写Blob: ```csharp using Oracle.ManagedDataAccess.Client; public void WriteBlob...