最近学习了一些BLOB读写的操作,用的是java io的操作,读取文件信息写到BLOB中,再从BLOB中读取信息写回到文件中
BLOB写入操作
package zxt.xsfw.action.ceshi;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import zxt.wai.action.ProtectedAction;
import zxt.wai.sys.Constant;
import zxt.wai.sys.RequestHelper;
import zxt.xsfw.init.WebInitLoad;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.sql.BLOB;
import java.sql.Statement;
public class BlobceshiAction extends ProtectedAction{
public boolean postProcess(HttpServletRequest request, HttpServletResponse response) {
return false;
}
public boolean process(HttpServletRequest request, HttpServletResponse response) {
String name = RequestHelper.getStrParam(request, "NAME");//请求中读取参数
String img = RequestHelper.getStrParam(request, "IMG");//请求中读取参数
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
BLOB blob = null;
FileInputStream fin=null;
OutputStream out=null;
try{
conn = WebInitLoad.getSysDBTookit().createConnection();
stm = conn.createStatement();
conn.setAutoCommit(false);
String sql = "insert into TEST values('1','"+name+"',EMPTY_BLOB())";
stm.executeUpdate(sql);
rs = stm.executeQuery("SELECT img FROM TEST WHERE id='1' FOR UPDATE ");
fin = new FileInputStream(img);
byte[] blobBuf = new byte[(int)fin.available()];
fin.read(blobBuf);
fin.close();
if(rs.next()) {
System.out.println(blobBuf.length);//以byte为单位
blob = (oracle.sql.BLOB)rs.getBlob(1);
out = blob.getBinaryOutputStream();
out.write(blobBuf);//写入到BLOB中去
out.close();
conn.commit();
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
rs.close();
stm.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
setReturnValue("<script>alert(\"ok!BLOB保存成功!\");history.back();</script>");
setReturnType(Constant.TARGET_TYPE_CONTENT);
return false;
}
}
BLOB读取操作
package zxt.xsfw.view.ceshi;
import org.enhydra.xml.xmlc.html.HTMLObject;
import zxt.wai.sys.XmlcViewFactory;
import zxt.wai.view.ProtectedXView;
import zxt.xsfw.init.WebInitLoad;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import oracle.sql.BLOB;
public class ReadBlobceshiXView {
public boolean render() {
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
try {
conn = getCon();
stm = conn.createStatement();
rs = stm.executeQuery("select img from TEST where id='1'");
if(rs.next()){
BLOB blob = (BLOB)rs.getBlob(1);
InputStream is = blob.getBinaryStream();
FileOutputStream os = new FileOutputStream("c:\\1.jpg");
int b;
byte[] buffer = new byte[1024];
while( (b=is.read(buffer)) != -1){
os.write(buffer,0,b);//把BLOB信息写到文件流中
}
is.close();
os.close();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
rs.close();
stm.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
public static void main(String[] orgs){
new ReadBlobceshiXView().render();
}
public static Connection getCon() {
Connection con = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@localhost:1521:ora9i";
String user = "";
String password = "";
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
}
分享到:
相关推荐
本篇文章将深入探讨如何在Delphi中对Oracle数据库的BLOB字段进行读写操作。 首先,你需要在Delphi项目中引入Oracle数据库访问的相关组件,如DBExpress或ADO。DBExpress是Delphi内置的一个轻量级数据库访问框架,而...
本篇文章将深入探讨如何使用C#语言访问Oracle数据库,并重点讲解处理Blob(Binary Large Object)字段的读写操作。 首先,让我们理解C#访问Oracle数据库的基本原理。Oracle数据库提供了一个名为ODP.NET(Oracle ...
此外,应用程序的事务管理策略(例如,JTA 或者 JDBC 本地事务)也会影响 BLOB 数据的读写行为,特别是在并发操作和错误处理时。 在实际开发中,考虑到性能和内存管理,处理大 BLOB 数据时,应采用流式处理...
本教程将深入探讨如何使用Java进行Blob字段的操作,以实现将图片或文件保存到数据库中。 1. **Blob字段的理解** Blob是SQL标准定义的一种数据类型,它能够存储大量的二进制数据,如图像、音频文件、PDF文档等。在...
下面我们将深入探讨Hibernate对BLOB和CLOB的操作。 首先,我们来看一下如何在数据库中创建包含BLOB和CLOB字段的表。例如,以下SQL语句创建了一个名为`users`的表,其中`uids`为主键,`img`为BLOB类型,`txt`为CLOB...
在VC6(Visual C++ 6.0)中进行数据库操作时,经常遇到需要处理Blob(Binary Large Object)类型的数据,这种数据类型通常用于存储大块的二进制数据,如图片、文档或音频文件等。Blob在ACCESS、MSSQL 2005和MSSQL ...
在Java编程中,Blob(Binary Large Object)对象用于存储大量二进制数据,如图片、音频或视频文件。当这些数据存储在数据库中时,我们需要有合适的方法来读取并显示它们。这里我们主要探讨两种Java从数据库中读取...
本文将详细介绍如何使用ADO(ActiveX Data Objects)技术在Oracle数据库中实现BLOB数据的读写操作。文中不仅会提供理论背景,还会给出具体的代码示例。 #### 二、环境搭建与前期准备 ##### 2.1 创建数据库表 在开始...
在DAO层,可能会有专门的方法来处理Blob对象的读写操作,例如使用Session的saveOrUpdate()方法保存包含Blob的数据,使用Blob的setBinaryStream()和getBinaryStream()方法进行读写操作。 项目中的单元测试是保证代码...
下面我们将详细讨论如何在MySQL和Qt环境下对BLOB数据类型进行操作。 首先,BLOB是一个用于存储大块二进制数据的数据类型,包括四种变体:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,它们的区别主要在于能存储的最大...
2. Delphi对BLOB数据的处理:Delphi使用Object Pascal的流类进行BLOB数据的读写操作。流是一种顺序数据的抽象,可以理解为数据在内存与外部设备(如文件、网络套接字)间传递的方式。Delphi中的VCL(Visual ...
这篇博客文章“Hibernate操作Oracle中Clob、Blob字段小结”可能会探讨如何在Hibernate中有效地处理这两种类型的数据。 1. **Clob与Blob的理解**: - Clob:Clob是用于存储大量字符数据的类型,例如长篇文章、XML...
Blob字段操作是数据库编程中的一个重要环节,尤其是在处理大量非结构化数据时。本教程将围绕Java如何与Blob字段进行交互展开,包括插入、查询、更新和删除Blob数据。 首先,理解Blob数据类型。Blob是Java.sql包中的...
3. 处理方式:对BLOB进行操作时,通常涉及二进制文件的读写,例如图片的上传和下载。CLOB操作则更偏向于文本内容的处理,如文本编辑、搜索等。 在Oracle数据库中,插入和查询BLOB和CLOB对象有特定的方法: 1. 插入...
**使用C++与ADO进行BLOB读写的关键点** 1. **连接数据库**:使用`CAdoConnection`对象建立与数据库的连接,提供必要的连接字符串。 2. **创建记录集**:使用`CAdoRecordset`打开一个包含BLOB字段的表或查询。 3. **...
本教程将详细介绍如何使用VC++通过ActiveX Data Objects (ADO) 技术来处理BLOB(Binary Large Object)类型的二进制数据,特别是在Access数据库中的读写操作。 首先,了解什么是BLOB。BLOB是数据库中用于存储大量非...
BLOB数据的操作通常涉及如何将这些文件存入数据库以及如何从数据库中检索和展示它们。在第16章中,主要探讨了两种处理BLOB数据的方式:文件方式和字段方式。 1. **文件方式**: - 在文件方式中,BLOB数据不直接...
在数据库编程领域,CLOB(Character Large Object)和BLOB(Binary Large Object)...通过正确使用Stream对象、分块读写、异步操作,以及理解数据库特性和最佳实践,可以确保应用程序在处理大量数据时保持稳定和高效。