- 浏览: 1089226 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
skyesx:
这是2PC实现,更常用的是一个柔性事务的实现,可以参考http ...
Spring分布式事务实现 -
ddbird:
这第一句就不严谨“分布式事务是指操作多个数据库之间的事务”,显 ...
Spring分布式事务实现 -
呵呵6666:
基于互联网支付系统的微服务架构分布式事务解决方案http:// ...
Spring分布式事务实现 -
小黄牛:
写得不错,交流群:472213887
Spring分布式事务实现 -
jiaoqf321456:
这明明是用的apache的压缩,给ant.jar有半毛钱关系吗 ...
使用ant.jar进行文件zip压缩
Oracle中的lob (Large Object)可以存储非常大的数据(可能是4GB),这样就可以通过将文件或其它任何对象序列化成字节输出流(OutputStream)后写入数据库,之后使用字节输入流(InputStream)将数据读出然后反序列化为原始文件或对象。操作时需要使用oracle的JDBC包,它扩展了sun的JDBC包中的Blob对象。
以下是一个保存图片进数据库的例子:
1.servlet:用于保存图片并将图片输出
2.所用到的存储过程
3.web.xml配置servlet
4.在image.html页面中调用下
以下是一个保存图片进数据库的例子:
1.servlet:用于保存图片并将图片输出
package com.logcd.servlet; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import oracle.sql.BLOB; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class ImageServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * 处理请求 * @throws FileUploadException */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Iterator<FileItem> i = getFileItem(request); String title = ""; byte[] data = null; while (i.hasNext()) { FileItem fi = (FileItem) i.next(); if (fi.isFormField()) {// 取得表单域 if(fi.getFieldName().equalsIgnoreCase("title")){ title = new String(fi.getString().getBytes("iso8859-1"),"gbk"); } } else {// 取文件域 data = fi.get();//文件二进制数据 } } Integer id = saveImageUseProc(data,title);//saveImage(data, title);//存入 //outputImage(response, id);//读出 outputImageUseProc(response,id); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * 通过SQL保存图片 * @param data * @param title */ @SuppressWarnings("deprecation") public static Integer saveImage(byte[] data, String title) { Connection conn = getConnection(); Integer id = (int) (Math.random() * 100000); String sql = "insert into t_image(id,title,image) values(" + id + ",'" + title + "',empty_blob())"; Statement stmt; OutputStream outStream = null; try { conn.setAutoCommit(false);// 如果不关闭会报-->"错误:读取违反顺序" stmt = conn.createStatement(); stmt.execute(sql); String sqll = "select image from t_image where id=" + id + " for update"; ResultSet rs = stmt.executeQuery(sqll); if (rs.next()) { BLOB blob = (BLOB) rs.getBlob("image"); outStream = blob.getBinaryOutputStream(); // data是传入的byte数组,定义:byte[] data outStream.write(data, 0, data.length); outStream.flush(); outStream.close(); conn.commit(); } } catch (Exception e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return id; } /** * 调用存储过程保存图片 * @param data * @param title * @return */ @SuppressWarnings("deprecation") public static Integer saveImageUseProc(byte[] data, String title){ Integer id = null; BLOB blob = null; OutputStream outStream; Connection conn = getConnection(); try{ conn.setAutoCommit(false); String call="{call OPERATE_BLOB.SAVE_BLOB_IMAGE(?,?,?)}";//调用语句 CallableStatement proc=conn.prepareCall(call);//调用存储过程 proc.setString(1, title); proc.registerOutParameter(2, Types.BLOB); proc.registerOutParameter(3, Types.INTEGER); proc.execute(); blob = (BLOB)proc.getBlob(2); id = proc.getInt(3);//返回结果 outStream = blob.getBinaryOutputStream(); outStream.write(data, 0, data.length); outStream.flush(); outStream.close(); proc.close(); conn.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return id; } /** * 输出保存的图片 * @param response * @param id */ public static void outputImage(HttpServletResponse response, Integer id) { Connection con = getConnection(); byte[] data = null; try{ Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select image from t_image where id=" + id); if (rs.next()) { BLOB blob = (BLOB)rs.getBlob("image"); InputStream inStream = blob.getBinaryStream(); int bufferSize = blob.getBufferSize(); data = new byte[bufferSize]; int count = inStream.read(data, 0, bufferSize); while(count != -1){//读出字节数据 response.getOutputStream().write(data,0,count); count = inStream.read(data, 0, bufferSize); } inStream.close(); } }catch(Exception e){ e.printStackTrace(); }finally{ try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 调用存储过程输出图片 * @param response * @param id */ public static void outputImageUseProc(HttpServletResponse response, Integer id){ Connection conn = getConnection(); try{ String call = "{call OPERATE_BLOB.QUERY_BLOB_IMAGE(?,?)}"; CallableStatement proc=conn.prepareCall(call);//调用存储过程 proc.setInt(1, id); proc.registerOutParameter(2, Types.BLOB); proc.execute(); BLOB blob = (BLOB)proc.getBlob(2); InputStream inStream = blob.getBinaryStream(); int bufferSize = blob.getBufferSize(); byte[] data = new byte[bufferSize]; int count = inStream.read(data, 0, bufferSize); while(count != -1){//读出字节数据 response.getOutputStream().write(data,0,count); count = inStream.read(data, 0, bufferSize); } inStream.close(); }catch(Exception e){ e.printStackTrace(); }finally{ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * 取得所有表单数据 * @param request * @return */ @SuppressWarnings("unchecked") public static Iterator<FileItem> getFileItem(HttpServletRequest request) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB List<FileItem> items = null; Iterator<FileItem> i = null; try { items = upload.parseRequest(request); i = items.iterator(); } catch (FileUploadException e) { e.printStackTrace(); } return i; } /** * 取得数据库连接 * * @return */ public static Connection getConnection() { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@195.2.199.6:1521:orcl"; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, "testdb", "logcd"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return conn; } }
2.所用到的存储过程
CREATE OR REPLACE PACKAGE BODY OPERATE_BLOB AS PROCEDURE SAVE_BLOB_IMAGE( PC_TITLE IN VARCHAR2, PB_IMAGE OUT BLOB, PN_ID OUT INTEGER )AS v_id INTEGER; BEGIN SELECT nvl(MAX(id),1000) + 1 INTO v_id FROM t_image; PN_ID := v_id; INSERT INTO t_image(id,title,image) values(v_id,PC_TITLE,empty_blob()) RETURNING image INTO PB_IMAGE; END; PROCEDURE QUERY_BLOB_IMAGE( PN_ID IN INTEGER, PB_IMAGE OUT BLOB )AS BEGIN SELECT image INTO PB_IMAGE FROM t_image WHERE id = PN_ID; END; END;
3.web.xml配置servlet
<servlet> <servlet-name>ImageServlet</servlet-name> <servlet-class>com.logcd.servlet.ImageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImageServlet</servlet-name> <url-pattern>/imageServlet</url-pattern> </servlet-mapping>
4.在image.html页面中调用下
<HTML> <HEAD> <TITLE>Image File</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </HEAD> <FORM method="POST" encType="multipart/form-data" action="imageServlet"> <INPUT type="text" name="title"> <BR> <INPUT type="file" name="image"> <BR> <INPUT type="submit" value="提交"> </FORM> <BODY> </BODY> </HTML>
发表评论
-
Oracle 如何扩展表空间
2013-09-26 14:29 0一、查看Oracle表空间的使用情况 select dbf ... -
Oracle之自定义聚合函数
2013-08-18 14:56 0一、聚合字符串 CREATE OR REPLACE FUN ... -
SQL Plus 命令及使用
2011-09-20 17:09 0一、登录到数据库 1.直接敲sqlplus并回车就是启动SQ ... -
Oracle数据字典/字段注释/分布式事务故障
2011-03-16 21:55 0一、Java 获取表的属性可以通过ResultSetMetaD ... -
Oracle中常用SQL
2010-05-28 12:49 01、求出本星期第一天和第七天的日期 select tru ... -
Oracle Errors收集
2010-05-23 23:21 2287一、ORA-01652无法通过128(在temp表空间中)扩展 ... -
oracle自动备份数据
2010-02-04 15:19 0一、自动备份脚本(backup.bat) @ECHO OF ... -
oracle实例内存(SGA和PGA)调整
2010-01-04 14:24 53710一、名词解释 (1)SGA:System Global Are ... -
PL/SQL集合类型
2009-11-20 13:57 5319PL/SQL集合类型是类似于高级语言数组的一种复合数据 ... -
java oracle clob
2009-06-26 21:59 6233create table TEST_CLOB ( ... -
PL/SQL的异常处理/光标/数据链路/导入导出存储过程
2009-06-26 21:57 2474一、PL/SQL的异常 1.处理异常: EXCEPTIO ... -
oracle 管道化表函数(Pipelined Table)
2009-06-18 20:37 9492在实际的应用中,为了让PL/SQL 函数返回数据的多个 ... -
ORACLE批量绑定FORALL与BULK COLLECT
2009-06-18 20:36 19898FORALL与BULK COLLECT的使用方法: 1. ... -
oracle 统计/分析函数
2009-06-09 14:42 6312Oracle从8.1.6开始提供分析函数,分析函数 ... -
PL/SQL开发中动态SQL的使用与过程分页
2009-06-01 11:45 2125在Oracle数据库开发 ... -
Oracle格式化函数
2009-04-02 14:52 6243格式化函数 函数 返回类型 描述 ... -
Oracle数据导入导出imp/exp命令和grant命令
2009-04-02 12:17 15457一、数据导入导出命令 ... -
JDBC驱动类型的区别
2009-03-31 08:31 3228jdbc-odbc桥:将JDBC调用转换到ODBC调用。 ... -
Java程序使用OCI驱动连接Oracle数据库
2009-03-31 08:00 4515根据oracle的说法,ja ... -
oracle之spfile与pfile
2009-01-20 15:19 14528pfile(Initialization Paramet ...
相关推荐
基于.NET的Oracle BLOB数据高效存取方法.pdf
Oracle,Clob,Blob数据操作例子
在C中存取Oracle数据库表中BLOB数据的方法研究.pdf
在Oracle数据表中存取BLOB数据的方法研究.pdf
Struts2 Hibernate存取Oracle数据库中的BLOB数据.pdf
Java存取OracleBlob字段,图片存储,Blob和BLOB的问题,Clob,oracle
并且此资料夹最后的版本可以将文件从extjs以数据流的形式传输到servlet,在后台存储blob数据,并且将blob数据从oracle数据库展示在extjs页面。没有完全实现的是extjs用uploadfild控件实现的blob数据上传预览,并且...
此压缩包中完全能实现的功能是在extjs中让本地照片预览,并且将地址传递给java后台,将图片文件以blob的形式存储到oracle数据库,并且可以默认将数据库中的数据第一次加载在预览框里(也就是从数据库中读出blob数据...
在Oracle中存取BLOB对象实现文件的上传和下载.txt 在Oracle中存取BLOB对象实现文件的上传和下载.txt
Oracle在PB中用OLE存取blob类型数据[归类].pdf
oracle 存读数据库的blob字段 .net有两种方式向Oracle的blob字段中存储图片:
c#-操作数据库oracle的小代码,提供用于学习。代码主要实现从oracle读取、保存、上传图片等功能,使用了Oracle.DataAccess.dll,想了解相关知识的欢迎下载,有问题的请给我留言,谢谢。
NULL 博文链接:https://liuzidong.iteye.com/blog/825365
Struts2,Hibernate3,Spring2实现oracle存取blob字段(图片等二进制文件) Myeclipse6.0下开发 哈哈,原来2分的,现在免费了!!!!!!!!!!!!!!!!!!!!!!!!给评分哦!!!!!!!!!!!!!!!!
Oracle,文件,讀取,blob Oracle,文件,讀取,blob Oracle,文件,讀取,blob
图片存取功能(支持mysql,oracle,sqlserver)完整的demo例子,可运行。mysql(longblob、blob),oracle(BLOB),SQLSERVER(varbinary(MAX))
SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。 SQL语言主要包含5个部分 数据定义...
Hibernate如何操作Oracle以及MySQL数据库中的图片文件,进行图片文件的自由存取,该文档详细描述了Hibernate如何对Oracle数据库以及MySQL数据库进行Blob字段的配置
java对oracle大字段读取类,因项目需求要对大字段进行存取,在网上搜集了些,自己加工了些。用起来很方便!
通过java JDBC实现 oracle 针对bolb数据类型的图片进行上传下载。此段代码是完整代码,只需要在pom文件中添加好需要的jdbc依赖即可。亲测!