处理Blob类型数据,例如将对象保存到blob字段中
来源:互联网 发布:mac播放wav格式 编辑:程序博客网 时间:2024/06/05 03:13
处理Blob类型数据
Blob(Binary Long Object)是二进制长对象的意思,Blob列通常用于存储大文件,例如:图片、声音文件、对象流。
注:无法处理带泛型的集合,如:List<Person>;可以先处理List集合,然后在转化为泛型就OK了,一定要将Person类进行序列化。
Blob数据插入数据库需要使用PreparedStatement,通过该对象的setBinaryStream(intparameterIndex,InputStream x)方法,将指定参数传入二进制输入流;取值时,调用ResultSet的getBlob(int columnIndex)方法,该方法返回一个Blob对象,调用Blob对象的getBinaryStream()方法,获取该Blob数据的输入流,也可使用getByte()方法,直接取出Blob对象封装的二进制数据。
一、创建带blob字段表格
Create table img table
(
Img id int auto incrementprimary key,
Img name varchar(255),
--创建一个mediumblob类型的数据列,用于保存图片数据
Img data mediumblob
)
注:在MySQL数据库里,blob类型最多只能存储64K内容,这可能不够满足实际用途,所以使用mediumblob类型,该类型的数据列可以存储16M内容。
二、java部分程序
1、插入带blob字段数据:
String sql = "insert intoPamMMiVIEWCONF (CLIENT_ID,VIEWNAME,VIEWDATA ) values ( ?,?, empty_blob())"; //and clientid=? //no nessery at now
pstmt = con.prepareStatement(sql);
pstmt.setString(1,viewConfig.getClientId());
pstmt.setString(2,viewConfig.getViewName());
pstmt.execute();
sql = "select VIEWDATA fromPamMMiVIEWCONF where CLIENT_ID=? and VIEWNAME = ? for update";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,viewConfig.getClientId());
pstmt.setString(2,viewConfig.getViewName());
rs = pstmt.executeQuery();
if (rs.next()) {
//oracle.sql.BLOB blob =(oracle.sql.BLOB) rs.getBlob(1);
//java.io.ObjectOutputStreamobjOutStm = new ObjectOutputStream(blob.getBinaryOutputStream());
java.sql.Blob blob =rs.getBlob(1);
ObjectOutputStream objOutStm = newObjectOutputStream(blob.setBinaryStream(0L));
objOutStm.writeObject(this.getSaveData(viewConfig));//看下面的方法
objOutStm.close();
}
注:this.getSaveData(viewConfig)方法
publicjava.util.HashMap getSaveData(ViewConfigInfo viewConfig){
HashMap htRtn = new HashMap();
htRtn.put("workQueue", viewConfig.getWorkQueue());
htRtn.put("workGroup", viewConfig.getWorkGroup());
htRtn.put("payerGroup", viewConfig.getPayerGroup());
htRtn.put("payerType", viewConfig.getPayerType());
htRtn.put("claimStatus", viewConfig.getClaimStatus());
htRtn.put("payerFullId",viewConfig.getPayerFullId());
htRtn.put("providers", viewConfig.getProviders());
htRtn.put("arkPayer", viewConfig.getArkPayer());
htRtn.put("pamQueConStatus", viewConfig.getPamQueConStatus());
return htRtn;
}
2、读取带blob字段的数据
HashMap viewData=new HashMap();
try {
con =DBUtil.assistantConnection();
Stringsql = "select * from PamMMiVIEWCONF where CLIENT_ID=? and VIEWNAME = ?"; //and clientid=? //no nessery at now?
pstmt= con.prepareStatement(sql);
pstmt.setString(1,clientId);
pstmt.setString(2,viewName);
rs =pstmt.executeQuery();
if(rs.next()) {
java.sql.Blobblob = rs.getBlob("VIEWDATA");
ObjectInputStreamobjInStm = null;
objInStm= new java.io.ObjectInputStream(blob.getBinaryStream());
viewData= (HashMap) objInStm.readObject();
}
}
通过setAlldata方法取值:
public void setAlldata(HashMap alldata) {
Objecto;
if((o = alldata.get("workQueue")) instanceof String[]) {
this.setWorkQueue((String[]) o);
}else {
this.setWorkQueue(new String[0]);
}
if((o = alldata.get("workGroup")) instanceof String[]) {
this.setWorkGroup((String[]) o);
}else {
this.setWorkGroup(new String[0]);
}
if((o = alldata.get("payerGroup")) instanceof String) {
this.payerGroup = (String) o;
}else {
this.payerGroup = "";
}
if((o = alldata.get("payerType")) instanceof String[]) {
this.payerType = (String[]) o;
}else {
this.payerType = new String[0];
}
if((o = alldata.get("payerFullId")) instanceof String) {
this.payerFullId = (String) o;
}else {
this.payerFullId = "";
}
if((o = alldata.get("claimStatus")) instanceof String[]) {
this.claimStatus = (String[]) o;
}else {
this.claimStatus = new String[] { "" };
}
if((o = alldata.get("providers")) instanceof String[]) {
this.setProviders((String[]) o);
}else {
this.setProviders(new String[0]);
}
if((o = alldata.get("arkPayer")) instanceof ARKPayer) {
this.setArkPayer((ARKPayer) o);
}else {
this.setArkPayer(new ARKPayer());
}
if ((o =alldata.get("pamQueConStatus")) instanceof PamQueConStatus) {
this.setPamQueConStatus((PamQueConStatus) o);
}else {
this.setPamQueConStatus(new PamQueConStatus());
}
}
- 处理Blob类型数据,例如将对象保存到blob字段中
- 如何处理BLOB类型数据之一:上传文件并保存到BLOB中
- 如何处理BLOB类型数据之二:下载BLOB内容并保存到文件中
- 将 C# 的图像对象保存到 Oracle BLOB 字段中
- 将 C# 的图像对象保存到 Oracle BLOB 字段中
- Kettle 生成的XML格式数据保存到Oracle 数据库的BLOB类型字段中
- 处理Blob类型数据:
- oracle 中 blob类型数据修改(从file保存到数据库,从java.sql.Blob 保存到oracle.sql.BLOB )
- C#将文件保存到Oracle的BLOB字段
- jdbc处理Oracle中Blob类型数据
- 将网络中的图片存为NSData并保存到sqlite的BLOB字段中.
- 将网络中的图片存为NSData并保存到sqlite的BLOB字段中
- 将网络中的图片存为NSData并保存到sqlite的BLOB字段中
- 将网络中的图片存为NSData并保存到sqlite的BLOB字段中
- 关于把数据保存到oracle中的blob字段
- 将图片保存至Oracle数据库Blob字段中
- JAVA将图片保存成oracle的Blob类型数据
- 将一些文档(.zip,.txt,.pdf)进行流处理,存储到mysql中blob字段中
- HDU --4283--You Are the One--区间DP
- mysql 存储过程示例1
- 765554368578
- 类的设计原则--OOD
- OpenCv函数cvCloneImage内存泄漏问题
- 处理Blob类型数据,例如将对象保存到blob字段中
- centos 6.3用yum安装中文输入法
- myeclipse怎么把整个项目导入进去?
- Linux线程同步之读写锁(rwlock)
- Android SimpleAdapter源码详解
- 网站被降权的自我分析与措施
- oracle对BLOB类型数据的操作与性能问题
- c++类的函数指针
- 如何设置LINUX下的环境变量