复制代码 代码如下: 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,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,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 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,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,1024)) != -1) { out.write(buf,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","D:2.jpg")); }
}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|