原创地址:http://www.cnblogs.com/yony/p/3254669.html
在偶然一次机会接触到这个问题,就找到了这个解决方法,收藏起来以便以后方便捡起来
Oracle数据库对应字段BLOB类型,实体对应字节数组类型(byte[]、@Type(type="org.springframework.orm.hibernate3.support.BlobByteArrayType"))。
一、存
1、把数据列表(List<Object>),放入Map<String,Object>中;
2、将Map对象转换为字节数据set到实体中
二、取
1、从实体中取出字节数组转化对象,然后强制转化为Map类型,用get(Object key)拿到存储在Map中的对象,最后转化为List就 Ok啦。。。

entity:
@Column(name = "JOB_DATA")
@Type(type="org.springframework.orm.hibernate3.support.BlobByteArrayType")
private byte[] jobData;
save:
List<AcmsInternetgatewaydevice> jobs = CollectUtils.newArrayList();
if (StringUtils.isNotEmpty(deviceIds)) {
jobs = acmsInternetgatewaydeviceService.getAcmsInternetgatewaydevicesByDeviceIds(StrUtils.splitToLong(deviceIds));
}
Map<String, Object> jobNes = new HashMap<String, Object>();
jobNes.put(JobUtils.NE_KEY, jobs);
entity.setJobData(Bytes.objct2Bytes(jobNes));
get:
List<AcmsInternetgatewaydevice> selectNes = null;
if(jobData!=null)
selectNes = (List<AcmsInternetgatewaydevice>) ((Map<String,Object>)Bytes.bytes2Objct(jobData)).get(JobUtils.NE_KEY);
JobUtils:
public class JobUtils {
public static final String QUARTS_SCHEDULER_KEY = "quartzScheduler";
public static final String NE_KEY = "JOB_NES";
}
Bytes:
package com.gloryscience.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Blob;
import java.sql.SQLException;
public class Bytes {
/**
* 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在 包含汉字的字符串时存在隐患,现调整如下:
*
* @param src 要截取的字符串
* @param start_idx 开始坐标(包括该坐标)
* @param end_idx 截止坐标(包括该坐标)
* @return
*/
public static String substring(String src, int start_idx, int end_idx) {
byte[] b = src.getBytes();
String tgt = "";
for (int i = start_idx; i <= end_idx; i++) {
tgt += (char) b[i];
}
return tgt;
}
public static byte[] objct2Bytes(java.lang.Object obj) {
if(obj == null){
return null;
}else{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
ObjectOutputStream ops = new ObjectOutputStream(
byteArrayOutputStream);
ops.writeObject(obj);
byte[] byteA = byteArrayOutputStream.toByteArray();
return byteA;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
return null;
}
public static java.lang.Object bytes2Objct(byte[] byteA) {
InputStream in = new ByteArrayInputStream(byteA);
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(in);
} catch (IOException e) {
e.printStackTrace();
}
try {
return ois.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
public static java.lang.Object blobToObjct(Blob blob) {
ObjectInputStream ois = null;
try {
InputStream in = blob.getBinaryStream();
ois = new ObjectInputStream(in);
return ois.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
本文介绍了一种在Oracle数据库中使用BLOB字段存储Java List数据的方法。具体步骤包括:将List对象转换为Map存储,并通过自定义工具类实现序列化与反序列化过程,最终实现List数据的有效存储与读取。
912

被折叠的 条评论
为什么被折叠?



