首页 > 代码库 > java 对象序列化存储oracle
java 对象序列化存储oracle
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){} } }}
java 对象序列化存储oracle
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。