java序列化对象 插入、查询、更新到数据库 :

实现代码例如以下:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement; /**
*
* 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;
} public final void storeSerialObject(Connection dbConn,String className,Object serialObj){
PreparedStatement pstmt = null;
try {
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
ObjectOutputStream objOuts = new ObjectOutputStream(byteArray);
objOuts.writeObject(serialObj); final byte[] objBytes = byteArray.toByteArray(); pstmt = dbConn.prepareStatement("insert into "+ this.tableName +" ("
+this.classNameColumn+", "+this.serialObjColumn
+") values (?,? )"); pstmt.setString(1, className); ByteArrayInputStream bis = new ByteArrayInputStream(objBytes);
pstmt.setBinaryStream(2, bis,objBytes.length); pstmt.execute();
} catch (Exception e) {
System.out.println("The error when serial obj:"+e.getMessage());
} finally {
close(null,pstmt,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){ PreparedStatement pstmt = null;
ResultSet rs = null; try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream objOuts = new ObjectOutputStream(out);
objOuts.writeObject(serialObj); final byte[] objBytes = out.toByteArray(); pstmt = dbConn.prepareStatement("update "+this.tableName+" set "+this.serialObjColumn+"=? where "+this.classNameColumn+"=?"); ByteArrayInputStream input = new ByteArrayInputStream(objBytes);
pstmt.setBinaryStream(1, input, objBytes.length);
pstmt.setString(2, className); pstmt.execute(); input.close();
out.close();
objOuts.close();
} catch (Exception e) {
System.out.println("The error when update serial obj:"+e.getMessage());
} finally {
close(rs,pstmt,dbConn);
} } 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 = rs.getBlob(this.serialObjColumn);
} byte[] getBytes = blob.getBytes(1, (int)blob.length()); ObjectInputStream objInput = new ObjectInputStream(new ByteArrayInputStream(getBytes));
returnObj = objInput.readObject(); 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序列化对象 插入、查询、更新到数据库 。

java序列化对象 插入、查询、更新到数据库的更多相关文章

  1. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  2. Java 序列化 对象序列化和反序列化

    Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...

  3. MyBatis动态批量插入、更新Mysql数据库的通用实现方案

    一.业务背景 由于需要从A数据库提取大量数据同步到B系统,采用了tomikos+jta进行分布式事务管理,先将系统数据源切换到数据提供方,将需要同步的数据查询出来,然后再将系统数据源切换到数据接收方, ...

  4. Android使用HttpURLConnection通过POST方式发送java序列化对象

    使用HttpURLConnection类不仅可以向WebService发送字符串,还可以发送序列化的java对象,实现Android手机和服务器之间的数据交互. Android端代码: public ...

  5. Java 序列化对象工具类

    SerializationUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.Byt ...

  6. java序列化对象为什么要定义serialversionUID值?

    SerialVersionUid,简言之,其目的是序列化对象版本控制,有关各版本反序列化时是否兼容.如果在新版本中这个值修改了,新版本就不兼容旧版本,反序列化时会抛出InvalidClassExcep ...

  7. python中的MySQL数据库操作 连接 插入 查询 更新 操作

    MySQL数据库 就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维 ...

  8. Android Sqlite数据库执行插入查询更新删除的操作对比

    下面是在Android4.0上,利用Sqlite数据库的insert,query,update,delete函数以及execSql,rawQuery函数执行插入,查询,更新,删除操作花费时间的对比结果 ...

  9. MongoDB中的映射,限制记录和记录拼排序 文档的插入查询更新删除操作

    映射 在 MongoDB 中,映射(Projection)指的是只选择文档中的必要数据,而非全部数据.如果文档有 5 个字段,而你只需要显示 3 个,则只需选择 3 个字段即可. find() 方法 ...

随机推荐

  1. 基于Visual C++2013拆解世界五百强面试题--题6-double类型逆序

    请设计一个函数,不许用到字符串函数,用数学运算,将double类型数据转换,例如123.456转换成654.321 首先想到依次提取他的每一个位数,然后进行运算,移动每一位数到相应位置,结果相加就能逆 ...

  2. HDU 2227 Find the nondecreasing subsequences

    题目大意:给定一个序列,求出其所有的上升子序列. 题解:一开始我以为是动态规划,后来发现离散后树状数组很好做,首先,c保存的是第i位上升子系列有几个,那么树状数组的sum就直接是现在的答案了,不过更新 ...

  3. DBV-00111: OCI failure (3722) (ORA-01002: fetch out of sequence解决

    在使用DBV检测segment的时候出现 DBV-00111: OCI failure (3722) (ORA-01002: fetch out of sequence)错误: 在寻找原因过程中发现相 ...

  4. 【翻译自mos文章】oracle支持在RDBMS HOME 下的 符号链接( Symbolic Links)吗?

    oracle支持在RDBMS HOME 下的 符号链接( Symbolic Links)吗? 參考原文: Does Oracle support Symbolic Links in the RDBMS ...

  5. 电信光纤猫 f412超级密码

    中兴F412光猫超级密码破解.破解用户限制.关闭远程控制.恢复路由器拨号 http://bbs.mydigit.cn/simple/?t1021161.html 不少家庭都改了光纤入户,那肯定少不了光 ...

  6. JDBC_获取插入记录的主键值

    <span style="font-size:24px;">package src.com.JDBC2DAO.java; import static org.junit ...

  7. base64这种编码的意义

    BASE64不是用来加密的.你看看经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象.你再仔细研究 ...

  8. qstring.h赏析

    https://github.com/qtproject/qtbase/blob/dev/src/corelib/tools/qstring.h C:\Qt\Qt5.3.2_min\5.3\mingw ...

  9. 【Android】: 部分注意事项

    1.用来触发BroadcastReceive的Intent和启动Activity或Service的Intent是不兼容的. 2.当文件名做为ContentProvider查询的一部分返回的时候,不应该 ...

  10. <jsp:include page="">和<%@include page=""%> 标签学习

    <jsp:include page=""><jsp:param value=""name=""/><DEL&g ...