复制番号代番号次のように:
パッケージcom.wanmei.meishu;
java.io.FileInputStreamをインポートします。
java.io.FileOutputStreamをインポートします。
java.io.FileReaderをインポートします。
java.io.InputStreamをインポートします。
java.io.OutputStreamをインポートします。
java.sql.Connectionをインポートします。
インポートjava.sql.DriverManager;
インポートjava.sql.PreparedStatement;
インポートjava.sql.ResultSet;
インポート java.sql.SQLException;
java.util.Propertiesをインポートします。
oracle.sql.BLOB をインポートします。
パブリック クラス BlobUtil {
プライベート静的 BlobUtil bu;
プライベート文字列環境;
public static BlobUtil getInstance(String env) {
bu = 新しい BlobUtil();
bu.env = 環境;
戻るブ。
}
/**
* <p>データ库链接に到達</p>
* @戻る
* @throws 例外
*/
プライベート接続 getConnection() が例外をスローする {
文字列 driver = "oracle.jdbc.driver.OracleDriver";
Class.forName(ドライバー);
文字列 env = this.env;
プロパティ pro = new Properties();
// 读取classes 目录下の配置文件
pro.load(new FileReader(Class.class.getResource("/config.properties").getFile()));
文字列ホスト = pro.getProperty(env + ".host");
文字列データベース = pro.getProperty(env + ".database");
文字列ユーザー名 = pro.getProperty(env + ".ユーザー名");
文字列パスワード = pro.getProperty(env + ".password");
文字列ポート = pro.getProperty(env + ".port");
文字列 URL = "jdbc:oracle:thin:@" + ホスト + ":" + ポート +":" + データベース;
return DriverManager.getConnection(url, ユーザー名, パスワード);
}
/**
* <p>传入项目、任务、付属品名、文件路径、写入パケット库</p>
* @param プロジェクト ID
* @paramタスクID
* @param ファイル名
* @paramファイル
* @return 返否成功
*/
public boolean write(String projectId, String taskId, String fileName, String file) {
接続 conn = null;
結果セット rs = null;
PreparedStatement ps = null;
BLOB ブロブ = null;
ブール値フラグ = false;
試す {
conn = getConnection();
conn.setAutoCommit(false);
文字列 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, プロジェクト ID);
ps.setString(2, タスク ID);
ps.setString(3, ファイル名);
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, プロジェクト ID);
ps.setString(2, タスク ID);
ps.setString(3, ファイル名);
rs = ps.executeQuery();
if(rs.next()) {
blob = (BLOB) rs.getBlob(1);
}
入力ストリーム = 新しい FileInputStream(ファイル);
OutputStream out = blob.setBinaryStream(1L);
byte[] バッファ = 新しいバイト [1024];
整数の長さ = -1;
while ((length = in.read(buffer)) != -1){
out.write(バッファ, 0, 長さ);
}
in.close();
out.close();
conn.commit();
conn.setAutoCommit(true);
フラグ = true;
}
catch(例外 e) {
if(conn != null) {
試す {
conn.rollback();
キャッチ (SQLException e1) {
e1.printStackTrace();
}
}
}
ついに {
試す {
rs.close();
ps.close();
conn.close();
}
catch(例外 e) {
e.printStackTrace();
}
}
リターンフラグ;
}
/**
* <p>项目Id、任务Id、文件名读取データベースブロブフィールド文件、指定された文件のパスに基づく</p>
* @param プロジェクト ID
* @paramタスクID
* @param ファイル名
* @paramファイル
* @return 返否成功
*/
public boolean read(String projectId, String taskId, String fileName, String file) {
接続 conn = null;
結果セット rs = null;
PreparedStatement ps = null;
BLOB ブロブ = null;
ブール値フラグ = false;
試す {
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, プロジェクト ID);
ps.setString(2, タスク ID);
ps.setString(3, ファイル名);
rs = ps.executeQuery();
if(rs.next()) {
blob = (BLOB) rs.getBlob(1);
}
入力ストリーム = blob.getBinaryStream();
byte[] buf = 新しいバイト[1024];
int bytesIn = 0;
FileOutputStream out = 新しい FileOutputStream(ファイル);
while ((bytesIn = in.read(buf, 0, 1024)) != -1) {
out.write(buf, 0, bytesIn);
}
in.close();
out.close();
フラグ = true;
}
catch(例外 e) {
e.printStackTrace();
}
ついに {
試す {
rs.close();
ps.close();
conn.close();
}
catch(例外 e) {
e.printStackTrace();
}
}
リターンフラグ;
}
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"));
}
}