Posted on 2009-05-18 13:51
三羽 閱讀(3748)
評論(0) 編輯 收藏 所屬分類:
JAVA資料
import java.sql.*;
import oracle.sql.*;
import java.io.*;
import oracle.jdbc.driver.OracleResultSet;
public class WriteBlob {
public static void main(String[] args) {
try {
// 連接數(shù)據(jù)庫
//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//Connection conn = DriverManager.getConnection("jdbc:odbc:Yzl","pda","pwpda");
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:SISSI","pda","pwpda");
conn.setAutoCommit(false);
// 獲取源照片數(shù)據(jù)
BLOB blob = null;
Blob blob2 = null;
String fileName = "c:\\01.jpg";
File f = new File(fileName);
// 先插入一條記錄,用于后面獲得一個Blob對象
PreparedStatement pstmt = conn.prepareStatement("insert into javatest(PICNAME,content) values(?,empty_blob())");
pstmt.setString(1,"Yzl");
pstmt.executeUpdate();
pstmt.close();
// 獲得Blob對象(由于Blob是接口,不能實例化,所以只好用這種曲折方法獲得)
pstmt = conn.prepareStatement("SELECT content FROM JAVATEST WHERE trim(PICNAME)=? ");
pstmt.setString(1,"Yzl");
ResultSet rset = pstmt.executeQuery();
if (rset.next()) blob = (BLOB)rset.getBlob(1);
pstmt.close();
if (blob == null){
System.out.println("blob is null");
conn.close();
return ;
}
// 填充Blob值,用于提交到數(shù)據(jù)庫
FileInputStream fin = new FileInputStream(f);
System.out.println("file size = " + fin.available());
OutputStream out = blob.getBinaryOutputStream();
byte[] data = new byte[(int)fin.available()];
// 獲取
fin.read(data);
out.write(data);
// 關(guān)閉資源
fin.close();
out.close();
// 插入數(shù)據(jù)庫
pstmt = conn.prepareStatement("update javatest set content=? where PICNAME=?");
pstmt.setBlob(1,blob);
pstmt.setString(2,"Yzl");
pstmt.executeUpdate();
pstmt.close();
// 提交
conn.commit();
// 獲取數(shù)據(jù)庫中的照片
pstmt = conn.prepareStatement("SELECT content FROM JAVATEST WHERE trim(PICNAME)=? ");
pstmt.setString(1,"Yzl");
rset = pstmt.executeQuery();
if (rset.next()) blob = (BLOB)((OracleResultSet)rset).getBLOB(1);
pstmt.close();
if (blob == null){
System.out.println("blob2 is null");
conn.close();
return ;
}
// 輸出到磁盤
// 獲得
FileOutputStream fout = new FileOutputStream(new File("c:\\02.jpg"));
InputStream in = blob.asciiStreamValue();
data = new byte[(int)in.available()];
System.out.println("數(shù)據(jù)庫中照片的字節(jié)數(shù):"+in.available()); // 此句總是為 0 不知道為什么,有誰知道嗎?
// 輸出
in.read(data);
fout.write(data);
// 關(guān)閉資源
fin.close();
out.close();
conn.close();
// 打開
//Process pro = Runtime.getRuntime().exec("cmd /c start c:\\02.jpg");
} catch (SQLException e) {
System.err.println(e.getMessage());
e.printStackTrace();
} catch (IOException e) {
System.err.println(e.getMessage());
} catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}