多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > java 對象序列化存儲oracle

java 對象序列化存儲oracle

來源:程序員人生   發布時間:2014-09-16 07:51:29 閱讀次數:2671次

java 對象序列化存儲oracle:

 

import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import oracle.sql.BLOB; /** * * handle serial object with oracle dbStore<br/> * eg: create table TEST_OBJECTSTORE ( CLASSNAME VARCHAR2(256), CONTENT BLOB ) * @author Administrator * */ public class ObjectSerialStore { private String tableName; private String classNameColumn; private String serialObjColumn; /** * construct * * @param tableName * @param classNameColumn * @param serialObjColumn */ public ObjectSerialStore(String tableName, String classNameColumn, String serialObjColumn) { this.tableName = tableName; this.classNameColumn = classNameColumn; this.serialObjColumn = serialObjColumn; } /** * store the serial Object * * @param dbConn close after use * @param className serialObj.getClass().getName() or OBJ.class.getName() * @param serialObj */ public final void storeSerialObject(Connection dbConn, String className, Object serialObj) { Statement stmt = null; ResultSet rs = null; try { ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); ObjectOutputStream objOuts = new ObjectOutputStream(byteArray); objOuts.writeObject(serialObj); final byte[] objBytes = byteArray.toByteArray(); dbConn.setAutoCommit(false); stmt = dbConn.createStatement(); stmt.executeUpdate("insert into " + this.tableName + " (" + this.classNameColumn + ", " + this.serialObjColumn + ") values ('" + className + "', empty_blob())"); rs = stmt.executeQuery("select " + this.serialObjColumn + " from " + this.tableName + " where " + this.classNameColumn + "='" + className + "' for update"); if (rs.next()) { BLOB blob = (BLOB) rs.getBlob(this.serialObjColumn); @SuppressWarnings("deprecation") OutputStream outStream = blob.getBinaryOutputStream(); outStream.write(objBytes, 0, objBytes.length); outStream.flush(); outStream.close(); } dbConn.commit(); byteArray.close(); objOuts.close(); } catch (Exception e) { System.out.println("The error when serial obj:"+e.getMessage()); } finally { close(rs,stmt,dbConn); } } /** * update the serial Object * @param dbConn close after use * @param className serialObj.getClass().getName() or OBJ.class.getName() * @param serialObj */ public final void updateSerialObject(Connection dbConn, String className, Object serialObj){ Statement stmt = null; ResultSet rs = null; try { ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); ObjectOutputStream objOuts = new ObjectOutputStream(byteArray); objOuts.writeObject(serialObj); final byte[] objBytes = byteArray.toByteArray(); dbConn.setAutoCommit(false); stmt = dbConn.createStatement(); stmt.executeUpdate("update "+this.tableName+" set "+this.serialObjColumn+"=empty_blob() where "+this.classNameColumn+"='"+className+"'"); rs = stmt.executeQuery("select " + this.serialObjColumn + " from " + this.tableName + " where " + this.classNameColumn + "='" + className + "' for update nowait"); if (rs.next()) { BLOB blob = (BLOB) rs.getBlob(this.serialObjColumn); @SuppressWarnings("deprecation") OutputStream outStream = blob.getBinaryOutputStream(); outStream.write(objBytes, 0, objBytes.length); outStream.flush(); outStream.close(); } dbConn.commit(); byteArray.close(); objOuts.close(); } catch (Exception e) { System.out.println("The error when update serial obj:"+e.getMessage()); } finally { close(rs,stmt,dbConn); } } /** * get the serial Object from db * * @param dbConn close after use * @param className serialObj.getClass().getName() or OBJ.class.getName() * @return */ public final Object getSerialObject(Connection dbConn, String className) { Statement stmt = null; ResultSet rs = null; Object returnObj = null; try{ stmt = dbConn.createStatement(); rs = stmt.executeQuery("select "+this.serialObjColumn+" from "+this.tableName+" where "+this.classNameColumn+"='"+className+"'"); BLOB blob = null; if(rs.next()){ blob = (BLOB) rs.getBlob(this.serialObjColumn); } InputStream is = blob.getBinaryStream(); BufferedInputStream bufferIs = new BufferedInputStream(is); byte[] byteArrays = new byte[blob.getBufferSize()]; while(-1 != bufferIs.read(byteArrays, 0, byteArrays.length)); ObjectInputStream objInput = new ObjectInputStream(new ByteArrayInputStream(byteArrays)); returnObj = objInput.readObject(); is.close(); bufferIs.close(); objInput.close(); }catch(Exception e){ System.out.println("The error when deserial obj:"+e.getMessage()); }finally{ close(rs,stmt,dbConn); } return returnObj; } private void close(ResultSet rs,Statement stmt,Connection conn){ if(rs != null){ try{ rs.close(); }catch(Exception e){} } if(stmt != null){ try{ stmt.close(); }catch(Exception e){} } if(conn != null){ try{ conn.close(); }catch(Exception e){} } } }


 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: www.日韩精品 | 色吊丝永久在线观看最新 | 2021精品国产综合久久 | 91久久精品一区二区三区 | 自拍偷拍亚洲区 | 亚洲经典在线观看 | 国产久7精品视频 | 国产国产精品人在线观看 | freexx性| 亚洲欧美综合精品成 | 7777精品伊人久久久大香线蕉 | 日本韩国在线视频 | 中文字幕首页 | 国产精品爱久久久久久久9999 | 亚洲欧美日韩在线2020 | 最近韩国动漫hd免费观看 | 欧美综合精品一区二区三区 | 最近中文免费字幕1 | 手机看片手机在线看片 | 1区2区3区4区| 亚洲精品大片 | 精品日韩在线视频一区二区三区 | 日本免费高清视频二区 | 国产高清精品一级毛片 | 欧美精品成人 | 伊人久久久综在合线久久在播 | 欧美同志的免费video | 图片区亚洲色图 | 成人精品国产亚洲 | 猫咪www免费人成网站 | 亚洲已满18点击进入在线观看 | 日韩欧美精品综合久久 | 欧美一级特黄做 | 淫www| 亚洲精品一二三区-久久 | 五月天免费在线视频 | 男女免费观看在线爽爽爽视频 | 亚洲欧美国产18 | 一级毛片在线完整观看 | 激情啪啪精品一区二区 | 国产高清日韩 |