public class InsertBlobData { Connection con = null; /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub InsertBlobData data = new InsertBlobData(); data.insertBlogInfo("002jpg", "sdsdfdf", "2007-02-12", "002.jpg"); } public void insertBlogInfo(String jmzh, String xm, String smsj, String fileName) throws Exception { // try { con = ConnectionPoliceFactory.getFactory().getConnection(); // } catch (ClassNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // 處理事務 boolean defaultCommit = con.getAutoCommit(); con.setAutoCommit(false); Statement st = con.createStatement(); // 插入一個空對象 st.executeUpdate("insert into ksren_txxx(jmzh,xm,smsj,txsj) values('" + jmzh + "','" + xm + "',to_date('" + smsj + "','yyyy-mm-dd'),empty_blob())"); // 用for update方式鎖定數據行 ResultSet rs = st .executeQuery("select txsj from ksren_txxx where jmzh='" + jmzh + "' and xm='" + xm + "' for update"); if (rs.next()) { // 得到java.sql.Blob對象,然后Cast為oracle.sql.BLOB oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1); // 到數據庫的輸出流 OutputStream outStream = blob.getBinaryOutputStream(); // 這里用一個文件模擬輸入流 InputStream fin = new FileInputStream(new File(fileName)); // 將輸入流寫到輸出流 byte[] b = new byte[blob.getBufferSize()]; int len = 0; while ((len = fin.read(b)) != -1) { outStream.write(b, 0, len); // blob.putBytes(1,b); } // 依次關閉(注意順序) fin.close(); outStream.flush(); outStream.close(); con.commit(); /* 恢復原提交狀態 */ con.setAutoCommit(defaultCommit); con.close(); } } }
來源:https://www.iteye.com/problems/5626