当前位置:  编程技术>java/j2ee

java读写oracle的blob字段示例

    来源: 互联网  发布时间:2014-11-03

    本文导语:  代码如下:package com.wanmei.meishu; import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.InputStream;import java.io.OutputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.Resul...

代码如下:

package com.wanmei.meishu;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import oracle.sql.BLOB;

public class BlobUtil {

 private static BlobUtil bu;
 private String env;
 public static BlobUtil getInstance(String env) {
  bu = new BlobUtil();
  bu.env = env;
  return bu;
 }

 /**
  *

得到数据库链接


  * @return
  * @throws Exception
  */
 private Connection getConnection() throws Exception {
  String driver = "oracle.jdbc.driver.OracleDriver";
  Class.forName(driver);
  String env = this.env;
  Properties pro = new Properties();
  // 读取classes 目录下的配置文件  
  pro.load(new FileReader(Class.class.getResource("/config.properties").getFile()));
  String host = pro.getProperty(env + ".host");
  String database = pro.getProperty(env + ".database");
  String username = pro.getProperty(env + ".username");
  String password = pro.getProperty(env + ".password");
  String port = pro.getProperty(env + ".port");
  String url = "jdbc:oracle:thin:@" + host + ":" + port +":" + database;
  return DriverManager.getConnection(url, username, password);
 }

 /**
  *

传入项目,任务,附件名称,文件路径,写入数据库


  * @param projectId
  * @param taskId
  * @param fileName
  * @param file
  * @return 返回是否成功
  */
 public boolean write(String projectId, String taskId, String fileName, String file) {
  Connection conn = null;
  ResultSet rs = null;
  PreparedStatement ps = null;
  BLOB blob = null;
  boolean flag = false;
  try {
   conn = getConnection();
   conn.setAutoCommit(false);

   String sql = "INSERT INTO PS_ZP_PRJ_WBS_BLOB BLB(ZP_PRJ_ID, ZZ_SEQ_NUM, ZZ_FILE_NAME, ZZ_IMAGE_BLOB) VALUES(?, ? ,? ,empty_blob())";
   ps = conn.prepareStatement(sql);
   ps.setString(1, projectId);
   ps.setString(2, taskId);
   ps.setString(3, fileName);
   ps.executeUpdate();
   sql = "SELECT ZZ_IMAGE_BLOB FROM PS_ZP_PRJ_WBS_BLOB WHERE ZP_PRJ_ID = ? AND ZZ_SEQ_NUM = ? AND ZZ_FILE_NAME = ? FOR UPDATE";
   ps = conn.prepareStatement(sql);
   ps.setString(1, projectId);
   ps.setString(2, taskId);
   ps.setString(3, fileName);
   rs = ps.executeQuery();
   if(rs.next()) {
    blob = (BLOB) rs.getBlob(1);
   }
   InputStream in = new FileInputStream(file);
   OutputStream out = blob.setBinaryStream(1L);
   byte[] buffer = new byte[1024];
   int length = -1;
            while ((length = in.read(buffer)) != -1){
                out.write(buffer, 0, length);
            }
            in.close();
            out.close();
            conn.commit();
            conn.setAutoCommit(true);
            flag = true; 
  }
  catch(Exception e) {
   if(conn != null) {
    try {
     conn.rollback();
    } catch (SQLException e1) {
     e1.printStackTrace();
    }
   }
  }
  finally {
   try {
    rs.close();
    ps.close();
    conn.close();
   }
   catch(Exception e) {
    e.printStackTrace();
   }
  }
  return flag;
 }

 /**
  *

根据项目Id,任务Id,文件名读取数据库blob字段文件,写入指定的文件路径


  * @param projectId
  * @param taskId
  * @param fileName
  * @param file
  * @return 返回是否成功
  */
 public boolean read(String projectId, String taskId, String fileName, String file) {
  Connection conn = null;
  ResultSet rs = null;
  PreparedStatement ps = null;
  BLOB blob = null;
  boolean flag = false;
  try {
   conn = getConnection();
   String sql = "SELECT ZZ_IMAGE_BLOB FROM PS_ZP_PRJ_WBS_BLOB WHERE ZP_PRJ_ID = ? AND ZZ_SEQ_NUM = ? AND ZZ_FILE_NAME = ?";
   ps = conn.prepareStatement(sql);
   ps.setString(1, projectId);
   ps.setString(2, taskId);
   ps.setString(3, fileName);
   rs = ps.executeQuery();
   if(rs.next()) {
    blob = (BLOB) rs.getBlob(1);
   }
   InputStream in = blob.getBinaryStream();
   byte[] buf = new byte[1024];
   int bytesIn = 0;
   FileOutputStream out = new FileOutputStream(file);
   while ((bytesIn = in.read(buf, 0, 1024)) != -1) {
    out.write(buf, 0, bytesIn);
   }
            in.close();
            out.close();
            flag = true;
  }
  catch(Exception e) {
   e.printStackTrace();
  }
  finally {
   try {
    rs.close();
    ps.close();
    conn.close();
   }
   catch(Exception e) {
    e.printStackTrace();
   }
  }
  return flag;
 }

 public static void main(String[] args) {
  BlobUtil bu = BlobUtil.getInstance("MSDEV");
  System.out.println(bu.write("CB", "001", "image1", "D:\61e44b02jw1dw4xbp2zo6j.jpg"));
  System.out.println(bu.read("CB", "001", "image1", "D:\2.jpg"));
 }

}


    
 
 

您可能感兴趣的文章:

  • 在Java中,用Mircosoft SQL Server数据库,请问要进行日期字段的读取,用( ResultSet rs ; rs.getDate(1),其中1代表相应的字段为 DateTi
  • !!!在Java中如何取得Resultset中的datetime和timestamp字段?数据库是SQLServer
  • java怎样读取数据库表中字段的数据类型?
  • 请问Access数据库中的日期型字段是对应java中的哪个Date类?
  • 高手请看:如何用java存取DB2中的BLOB字段!!
  • 数据库中日期型字段,如何在 java 中分别获得其中的年月日
  • java里有没有办法得到一个表里的字段名
  • java中有没有什么方法可以求出数据库表中的字段名?赋到一个String的数组中?
  • java中的数据库结果集可以被赋值吗,可以通过结果集的方法来更新数据库字段吗?
  • 请问在java钟如何得到数据库中的记录总数,以及如何求数据库中一个字段的和?
  • 请教用java从properties文件中读取属性字段的方法?
  • Java 反射之私有字段和方法详细介绍
  • 奇怪啊,奇怪,为什么我的JB7做EJB时,只要在EJB设计面板上随便做点东西,我的EJB的JAVA的源码就会变的不见了,或者少了很多字段申明??
  • ado的rs.field("字段名")可以访问任何类型的数据,那吗java里面这种问题如何处理。是不是要先判断类型然后再根据类型来使用相应的getint or getString阿!谢谢了!在线等待!
  • java sqlserver text 类型字段读取方法
  • 用JAVA从数据库中读出字段及内容
  • 请问oracle的clob字段可不可以存富文本的文件,like .doc .rtf?如果可以如何用java读取?
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程
  • java Servlet实现Session创建存取以及url重写代码示例
  • java 四舍五入使java保留2位小数示例讲解
  • java进行error捕获和处理示例(java异常捕获)
  • java去除集合中重复元素示例分享 java去除重复
  • java读取csv文件示例分享(java解析csv文件)
  • java求三个数的最大值的示例分享
  • java生成字母数字组合的随机数示例 java生成随机数
  • java实现网页解析示例
  • java协变返回类型使用示例
  • 使用java执行定时任务示例
  • java自定义枚举转换器示例
  • java向文件末尾添加内容示例分享
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Java读写包括中文的txt文件时不同编码格式问题解决
  • 请问JAVA如何读写注册表
  • java中如何实现串口读写?
  • JAVA Applet能够读写文件吗?
  • Java中有没有什么类来实现读写注册表文件?
  • VCard格式读写的Java类库 cardme
  • Java读写MPX文件包 MPXJ
  • 怎样用JAVA函数读写注册表,有这样的函数吗
  • 求救,java中读写excel的问题
  • 有什么办法自己用java编写一个数据库读写的文件呀?
  • RSS的Java读写库 RSSpect
  • java中如何实现读写类似vc中结构数据?
  • 高分求够JAVA读写XML方面的电子书籍下载地址
  • 请问:java语言能读写注册表吗?多谢多谢,
  • 如何用java在linux中读写串口啊?请高手指点
  • 用JAVA的IO怎么实现图形文件(GIF/JPG)的读写,100分奉送!
  • 学习JAVA时写了个读写Ini文件的类,赏脸的朋友请进来留个话吧……
  • Java 配置文件读写 Commons Configuration
  • Java的中文读写问题,有请各位了。
  • 分享关于JAVA 中使用Preferences读写注册表时要注意的地方
  • java多线程读写文件示例
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3