zoukankan      html  css  js  c++  java
  • java 读写Oracle Blob字段

    许久没有分享代码了,把这段时间写的一个Java操作Blob字段,有日子没写Java了,就当作笔记记录一下。
    1. [代码][Java]代码     跳至 [1] [全屏预览]
    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;
    }

    /**
    * <p>得到数据库链接</p>
    * @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);
    }
     /**
    * <p>传入项目,任务,附件名称,文件路径,写入数据库</p>
    * @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;
    }

    /**
    * <p>根据项目Id,任务Id,文件名读取数据库blob字段文件,写入指定的文件路径</p>
    * @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;http://www.huiyi8.com/webyuanma/
    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"));
    }
    }

  • 相关阅读:
    vmware磁盘空间扩展
    Winrar发现损坏的压缩文件头
    java ASM动态生成类
    使用ffmpeg将任意格式视频转MP4格式
    mongodb导入csv结构化数据
    Vmware黑屏解决方法
    mysql命令行导入结构化数据
    mysql导入慢解决方法
    CategoryPanelGroup动态生成节点
    delphi XE7 判断手机返回键
  • 原文地址:https://www.cnblogs.com/xkzy/p/3820495.html
Copyright © 2011-2022 走看看