`
谷超
  • 浏览: 163228 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BLOB的读写操作

    博客分类:
  • Java
阅读更多

最近学习了一些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;
	}

}

 

0
0
分享到:
评论

相关推荐

    oracle blob 字段 读写 delphi

    很多朋友在操作oracle数据库的clob,blob字段时不知道怎么插入和使用,这里提供读写范例。

    vc6读取数据库blob大二制对像

    vc6读取数据库blob大二制对像,在ACCESS,mssql2005,mssql2008下对blob的存取操作,希望对大家有所帮助

    Java从数据库中读取Blob对象图片并显示的方法

    主要介绍了Java从数据库中读取Blob对象图片并显示的方法,实例分析了Java读取数据库中Blob对象图片的技巧与操作方法,需要的朋友可以参考下

    详解jdbc实现对CLOB和BLOB数据类型的操作

    主要介绍了详解jdbc实现对CLOB和BLOB数据类型的操作的相关资料,这里实现写入操作与读写操作,需要的朋友可以参考下

    git-blob-stream:使用node.js Stream2读写git blob

    git-blob-stream 警告该软件包仍在积极开发中,我保留在0.1.0发布之前...要读取Blob文件,请执行以下操作: var fs = require ( 'fs' ) ; var gbs = require ( 'git-blob-stream' ) ; var input = fs . createRea

    sqlite3数据库操作类

    此类集成了许多数据库常用操作和一些不常用操作的方法和实例(包括blob数据类型的操作,此blob类型的读写不限于单个读写,可自由灵活的操作多个blob字段);本程序为本人对sqlite3的包装,目的在于更方便的调用数据库...

    blobfs:BlobFs是由Microsoft azure blob存储服务支持的基于分布式FUSE的文件系统。 无论是Linux系统还是Windows系统,它都允许您将存储对象作为本地文件夹驱动程序挂载在存储帐户中。 它还支持集群模式

    负责处理所有潜在的天蓝色blob存储操作 如果您有贡献,请通过与我联系。 项目目标 对象存储是您决定开始云计算之旅时会遇到的最基本的主题之一。该项目的主要目标是使azure存储服务易于在Linux和Windows box上使用...

    DTX - Database Toolbox For MFC Ver 1.8 (Freeware Version)

    Blob变量(比如读写DBimage)。它使用简单。版本1.8是一个只可以使用MS的Access数据库 ,但是这个类并不只是为Access数据库而做。它可以操作很多类型的数据库。 特色 1.使用非常简单。 2.自动读写变量 3.自动...

    数据库并发控制机制——事务

    这是一个关于银行的数据库的处理,模仿的是从账户1转账给账户2一百块钱,其中有两个操作,一个是帐户一减钱,账户二加钱,这两个操作要么一起执行,要么一起不执行,那如果处理只执行了一个步骤呢?那就需要用到事务...

    VC++超长数据库字段读写操纵实例

     VC++超长字段读写操纵实例,Access数据库超大字符串存取的操作示例,平时虽然不常用,但作为高手,有必要了解。测试时注意,要运行程序必须将数据库文件blob.mdb与可执行文件放在一起,如果在vc开发环境中运行,则...

    MySQLBlobTools

    一个简单的java实现的命令行工具,可以对单条记录的Blob数据进行文件读写操作。还可以通过脚本实现批量处理。 java -jar MySQLBlobTools.jar -u -d "jdbc:mysql://localhost:3306/test?user=root&password=test&...

    VC++中数据库及其相关技术&使用SQL查询、操纵数据库

    并添加记录、使用ADO在数据库中遍历、修改和删除记录、使用ADO Data和DataGrid控件实现遍历、修改、删除、添加、使用ADO直接操作Access数据库、使用ADO向数据库添加BLOB数据(图像)、使用ADO从数据库中读出BLOB数据...

    sqlite-demo.zip

    sqlite源码依赖封装,实现db创建、table创建、记录的插入、删除、更新,查找操作,对blob类型的读写。直接依赖sqlite源码,无需依赖so或dll库

    sqlite3.08源码包及使用指南

    字符串和BLOB类型的大小只受限于可用内存。完整配置的少于250KB,忽略一些可选特性的少于150KB。 在大多数常见操作上比流行的客户/服务器数据库引擎更快。 简单易于使用的API。 内建TCL绑定。 另外提供可用于许多...

    java jdk实列宝典 光盘源代码

    读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,UpdateWithResultSet.java; 使用RowSet,....

    Android 中SQLite技术实例详解

    数据读写:SQLite数据库打开只是一个文件的读写流。 二.简单的数据库语句知识 在android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持NULL,INTEGER,REAL(浮点数字),TEXT(字符串文本)和BLOB(二进制对象)...

    Android利用LitePal操作数据库存取图片

    Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很...

    baseserver:服务器(托管nodejs)实用程序的共享库

    根据Serverbase库汇集了DRA2020的... :一组实用程序类,用于将文件操作(例如mkdir)公开为与FSM兼容的类。 :日志接口的服务器实现,支持将日志保存到Blob存储中。 :在AWS S3之上的存储抽象的实现,以FSM类公开。

    5.4空间数据库管理系统.pdf

    将图形数据的变长部分处理成二进制块BLOB字段 大部分关系数据库管理系统都提供了二进制块的字段域 基本思想: 省去了前面所述的大量关系连接操作 二进制块的读写效率要比定长的属性字段慢得多,特别是涉及对象 的...

    opencv的全部基础操作,一共109个实例全部都在anaconda3,python3.7,opencv4调试通过。

    code_001 | [图片读取与显示](python/code_001/opencv_001.py) | ✔️ code_002 | [图片灰度化](python/code_002/opencv_002.py) | ✔️ code_003 | [图像创建与...code_109 | [BLOB 特征分析](python/code_109) | ✔️

Global site tag (gtag.js) - Google Analytics