复制代码代码如下:
pacote com.wanmei.meishu;
importar java.io.FileInputStream;
importar java.io.FileOutputStream;
importar java.io.FileReader;
importar java.io.InputStream;
importar java.io.OutputStream;
importar java.sql.Connection;
importar java.sql.DriverManager;
importar java.sql.PreparedStatement;
importar java.sql.ResultSet;
importar java.sql.SQLException;
importar java.util.Properties;
importar oracle.sql.BLOB;
classe pública BlobUtil {
BlobUtil estático privado bu;
ambiente de string privado;
public static BlobUtil getInstance(String env) {
bu = new BlobUtil();
bu.env = env;
retornar bu;
}
/**
* <p>得到数据库链接</p>
* @retornar
* @throws Exceção
*/
conexão privada getConnection() lança exceção {
String driver = "oracle.jdbc.driver.OracleDriver";
Classe.forNome(motorista);
String env = this.env;
Propriedades pro = new Propriedades();
// 读取classes 目录下的配置文件
pro.load(new FileReader(Class.class.getResource("/config.properties").getFile()));
String host = pro.getProperty(env + ".host");
String banco de dados = pro.getProperty(env + ".database");
String nome de usuário = pro.getProperty(env + ".nome de usuário");
String senha = pro.getProperty(env + ".password");
String porta = pro.getProperty(env + ".port");
String url = "jdbc:oracle:thin:@" + host + ":" + porta +":" + banco de dados;
return DriverManager.getConnection(url, nome de usuário, senha);
}
/**
* <p>传入项目,任务,附件名称,文件路径,写入数据库</p>
* @param projectId
* @param taskId
* @param nomeArquivo
* @param arquivo
* @return 返回是否成功
*/
escrita booleana pública (String projectId, String taskId, String fileName, String arquivo) {
Conexão conexão = null;
Conjunto de resultados rs = null;
PreparadoStatement ps = null;
BLOB blob = nulo;
sinalizador booleano = falso;
tentar {
conexão = getConnection();
conn.setAutoCommit(falso);
String sql = "INSERIR EM PS_ZP_PRJ_WBS_BLOB BLB (ZP_PRJ_ID, ZZ_SEQ_NUM, ZZ_FILE_NAME, ZZ_IMAGE_BLOB) VALORES (?, ? ,? ,empty_blob())";
ps = conn.prepareStatement(sql);
ps.setString(1, projectId);
ps.setString(2, taskId);
ps.setString(3, nomeArquivo);
ps.executeUpdate();
sql = "SELECIONE ZZ_IMAGE_BLOB DE PS_ZP_PRJ_WBS_BLOB ONDE ZP_PRJ_ID = ? E ZZ_SEQ_NUM = ? E ZZ_FILE_NAME = ? PARA ATUALIZAÇÃO";
ps = conn.prepareStatement(sql);
ps.setString(1, projectId);
ps.setString(2, taskId);
ps.setString(3, nomeArquivo);
rs = ps.executeQuery();
if(rs.next()) {
blob = (BLOB)rs.getBlob(1);
}
InputStream in = new FileInputStream(arquivo);
OutputStream out = blob.setBinaryStream(1L);
byte[] buffer = novo byte[1024];
comprimento interno = -1;
enquanto ((comprimento = in.read(buffer)) != -1){
out.write(buffer, 0, comprimento);
}
in.close();
out.close();
conn.commit();
conn.setAutoCommit(true);
bandeira = verdadeiro;
}
catch(Exceção e) {
if(conn! = nulo) {
tentar {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
finalmente {
tentar {
rs.close();
close();
conn.close();
}
catch(Exceção e) {
e.printStackTrace();
}
}
bandeira de retorno;
}
/**
* <p>根据项目Id;
* @param projectId
* @param taskId
* @param nomeArquivo
* @param arquivo
* @return 返回是否成功
*/
leitura booleana pública (String projectId, String taskId, String fileName, String arquivo) {
Conexão conexão = null;
Conjunto de resultados rs = null;
PreparadoStatement ps = null;
BLOB blob = nulo;
sinalizador booleano = falso;
tentar {
conexão = getConnection();
String sql = "SELECIONE ZZ_IMAGE_BLOB DE PS_ZP_PRJ_WBS_BLOB ONDE ZP_PRJ_ID = ? E ZZ_SEQ_NUM = ? E ZZ_FILE_NAME = ?";
ps = conn.prepareStatement(sql);
ps.setString(1, projectId);
ps.setString(2, taskId);
ps.setString(3, nomeArquivo);
rs = ps.executeQuery();
if(rs.next()) {
blob = (BLOB)rs.getBlob(1);
}
InputStream in = blob.getBinaryStream();
byte[] buf = novo byte[1024];
int bytesIn = 0;
FileOutputStream out = new FileOutputStream(arquivo);
enquanto ((bytesIn = in.read(buf, 0, 1024)) != -1) {
out.write(buf, 0, bytesIn);
}
in.close();
out.close();
bandeira = verdadeiro;
}
catch(Exceção e) {
e.printStackTrace();
}
finalmente {
tentar {
rs.close();
close();
conn.close();
}
catch(Exceção e) {
e.printStackTrace();
}
}
bandeira de retorno;
}
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"));
}
}