问题描述
如何把一个文件保存到oracle数据库表中 用java实现
解决方案
public class InsertBlobData {Connection con = null;/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubInsertBlobData 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.BLOBoracle.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();}}}