最近学习了一些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;
}
}
分享到:
相关推荐
很多朋友在操作oracle数据库的clob,blob字段时不知道怎么插入和使用,这里提供读写范例。
vc6读取数据库blob大二制对像,在ACCESS,mssql2005,mssql2008下对blob的存取操作,希望对大家有所帮助
主要介绍了Java从数据库中读取Blob对象图片并显示的方法,实例分析了Java读取数据库中Blob对象图片的技巧与操作方法,需要的朋友可以参考下
主要介绍了详解jdbc实现对CLOB和BLOB数据类型的操作的相关资料,这里实现写入操作与读写操作,需要的朋友可以参考下
git-blob-stream 警告该软件包仍在积极开发中,我保留在0.1.0发布之前...要读取Blob文件,请执行以下操作: var fs = require ( 'fs' ) ; var gbs = require ( 'git-blob-stream' ) ; var input = fs . createRea
此类集成了许多数据库常用操作和一些不常用操作的方法和实例(包括blob数据类型的操作,此blob类型的读写不限于单个读写,可自由灵活的操作多个blob字段);本程序为本人对sqlite3的包装,目的在于更方便的调用数据库...
负责处理所有潜在的天蓝色blob存储操作 如果您有贡献,请通过与我联系。 项目目标 对象存储是您决定开始云计算之旅时会遇到的最基本的主题之一。该项目的主要目标是使azure存储服务易于在Linux和Windows box上使用...
Blob变量(比如读写DBimage)。它使用简单。版本1.8是一个只可以使用MS的Access数据库 ,但是这个类并不只是为Access数据库而做。它可以操作很多类型的数据库。 特色 1.使用非常简单。 2.自动读写变量 3.自动...
这是一个关于银行的数据库的处理,模仿的是从账户1转账给账户2一百块钱,其中有两个操作,一个是帐户一减钱,账户二加钱,这两个操作要么一起执行,要么一起不执行,那如果处理只执行了一个步骤呢?那就需要用到事务...
VC++超长字段读写操纵实例,Access数据库超大字符串存取的操作示例,平时虽然不常用,但作为高手,有必要了解。测试时注意,要运行程序必须将数据库文件blob.mdb与可执行文件放在一起,如果在vc开发环境中运行,则...
一个简单的java实现的命令行工具,可以对单条记录的Blob数据进行文件读写操作。还可以通过脚本实现批量处理。 java -jar MySQLBlobTools.jar -u -d "jdbc:mysql://localhost:3306/test?user=root&password=test&...
并添加记录、使用ADO在数据库中遍历、修改和删除记录、使用ADO Data和DataGrid控件实现遍历、修改、删除、添加、使用ADO直接操作Access数据库、使用ADO向数据库添加BLOB数据(图像)、使用ADO从数据库中读出BLOB数据...
sqlite源码依赖封装,实现db创建、table创建、记录的插入、删除、更新,查找操作,对blob类型的读写。直接依赖sqlite源码,无需依赖so或dll库
字符串和BLOB类型的大小只受限于可用内存。完整配置的少于250KB,忽略一些可选特性的少于150KB。 在大多数常见操作上比流行的客户/服务器数据库引擎更快。 简单易于使用的API。 内建TCL绑定。 另外提供可用于许多...
读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,UpdateWithResultSet.java; 使用RowSet,....
数据读写:SQLite数据库打开只是一个文件的读写流。 二.简单的数据库语句知识 在android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持NULL,INTEGER,REAL(浮点数字),TEXT(字符串文本)和BLOB(二进制对象)...
Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...
根据Serverbase库汇集了DRA2020的... :一组实用程序类,用于将文件操作(例如mkdir)公开为与FSM兼容的类。 :日志接口的服务器实现,支持将日志保存到Blob存储中。 :在AWS S3之上的存储抽象的实现,以FSM类公开。
将图形数据的变长部分处理成二进制块BLOB字段 大部分关系数据库管理系统都提供了二进制块的字段域 基本思想: 省去了前面所述的大量关系连接操作 二进制块的读写效率要比定长的属性字段慢得多,特别是涉及对象 的...
code_001 | [图片读取与显示](python/code_001/opencv_001.py) | ✔️ code_002 | [图片灰度化](python/code_002/opencv_002.py) | ✔️ code_003 | [图像创建与...code_109 | [BLOB 特征分析](python/code_109) | ✔️