• 将对象存为数据库二进制数据的处理方法


    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;
        }
        
    }
  • 相关阅读:
    DLL文件的原理
    OD使用教程7(上) 调试篇07|解密系列
    复制独立数组的方法
    [转载 js] js正则表达式
    中国雅虎ued成员
    复制独立数组的方法
    [转载 js] js正则表达式
    以前做的flash相册
    编程的幽默
    我最早的全flash站
  • 原文地址:https://www.cnblogs.com/yony/p/3254669.html
Copyright © 2020-2023  润新知