91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql存儲二進制對象數據問題怎么解決

發布時間:2023-03-14 17:21:08 來源:億速云 閱讀:155 作者:iii 欄目:開發技術

這篇“Mysql存儲二進制對象數據問題怎么解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Mysql存儲二進制對象數據問題怎么解決”文章吧。

    Mysql存儲二進制對象數據

    首先數據庫存儲一個Object對象

    需要在數據庫表中定義一個blob類型的字段

    Mysql存儲二進制對象數據問題怎么解決

    與數據庫對應的實體類

    Mysql存儲二進制對象數據問題怎么解決

    編寫一個操作二進制的工具類

    import java.io.*;
     
    /**
     * byte[]類型操作類
     */
    public class BlobUtil {
     
        /**
         * 把object對象序列化為二進制字節數組
         * @param object
         * @return
         */
        public static byte[] setObject(Object object) {
            ByteArrayOutputStream baos = null;
            ObjectOutputStream out = null;
            try {
                baos = new ByteArrayOutputStream();
                out = new ObjectOutputStream(baos);
                out.writeObject(object);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (baos != null) {
                    try {
                        baos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return baos.toByteArray();
        }
     
        /**
         * 把二進制字節數組反序列化為object對象
         * object當中的每個javaBean對象都必須實現序列化
    	 * 最外層的類必須生成一個序列化ID
         * @param bytes
         * @return
         */
        public static Object getObject(byte[] bytes) {
            Object obj = null;
            ByteArrayInputStream bais = null;
            ObjectInputStream in = null;
            try {
                bais = new ByteArrayInputStream(bytes);
                in = new ObjectInputStream(bais);
                obj = in.readObject();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (bais != null) {
                    try {
                        bais.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return obj;
        }
    }

    需要轉換為byte[]的對象必須實現序列化和生成一個序列化ID,生成一個序列化ID是為了解決類當中一但有修改,反序列化時序列化ID就會對應不上,如下圖:

    類中如果有其他類為變量也需要實現序列化,否則從數據庫中取出數據然后反序列化成Object對象的時候會直接報錯

    對user的數據進行操作

    import java.io.Serializable;
     
    /**
     * @author
     * @description
     * @date
     */
    public class UserVO implements Serializable {
     
        private static final long serialVersionUID = 1L;
     
        private String userId;
     
        private String userName;
     
        private String password;
     
        public String getUserId() {
            return userId;
        }
     
        public void setUserId(String userId) {
            this.userId = userId;
        }
     
        public String getUserName() {
            return userName;
        }
     
        public void setUserName(String userName) {
            this.userName = userName;
        }
     
        public String getPassword() {
            return password;
        }
     
        public void setPassword(String password) {
            this.password = password;
        }
    }

    調用二進制工具類來轉換數據然后進行存取就可以了。

    測試功能

    public class TestMain {
     
        public static void main(String[] args) {
            UserVO user = new UserVO();
            user.setUserId("123456");
            user.setUserName("張三");
            byte[] dataValue = BlobUtil.setObject(user);
            System.out.println("=====對象轉換成blob類型數據====="+Arrays.toString(dataValue));
            UserVO userVO = (UserVO) BlobUtil.getObject(dataValue);
            System.out.println("=====blob類型數據轉換成對象====="+ JSONObject.toJSONString(userVO));
        }
    }

    打印輸出

    =====對象轉換成blob類型數據=====[-84, -19, 0, 5, 115, 114, 0, 53, 99, 111, 109, 46, 100, 111, 108, 112, 104, 105, 110, 46, 109, 111, 100, 117, 108, 101, 115, 46, 116, 109, 115, 46, 100, 111, 109, 97, 105, 110, 46, 99, 117, 115, 116, 111, 109, 101, 114, 115, 101, 114, 118, 105, 99, 101, 46, 85, 115, 101, 114, 86, 79, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 3, 76, 0, 8, 112, 97, 115, 115, 119, 111, 114, 100, 116, 0, 18, 76, 106, 97, 118, 97, 47, 108, 97, 110, 103, 47, 83, 116, 114, 105, 110, 103, 59, 76, 0, 6, 117, 115, 101, 114, 73, 100, 113, 0, 126, 0, 1, 76, 0, 8, 117, 115, 101, 114, 78, 97, 109, 101, 113, 0, 126, 0, 1, 120, 112, 112, 116, 0, 6, 49, 50, 51, 52, 53, 54, 116, 0, 6, -27, -68, -96, -28, -72, -119]
    =====blob類型數據轉換成對象====={"userId":"123456","userName":"張三"}

    Mysql存儲二進制大型對象類型對照

    MySql MediumBlob——MySql的Bolb四種類型

    MySQL中,BLOB是一個二進制大型對象,是一個可以存儲大量數據的容器,它能容納不同大小的數據。

    BLOB類型實際是個類型系列(TinyBlob、Blob、MediumBlob、LongBlob),除了在存儲的最大信息量上不同外,他們是等同的。

    Mysql存儲二進制對象數據問題怎么解決

    以上就是關于“Mysql存儲二進制對象數據問題怎么解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    攀枝花市| 新乡县| 阿克陶县| 穆棱市| 克东县| 濉溪县| 广灵县| 顺平县| 湘潭市| 嘉祥县| 那曲县| 万宁市| 屏东市| 兴和县| 磐石市| 本溪市| 同德县| 焦作市| 咸丰县| 盱眙县| 教育| 巫山县| 临邑县| 正蓝旗| 临海市| 涞源县| 静乐县| 黄浦区| 荆州市| 温州市| 会同县| 三亚市| 建德市| 普定县| 马尔康县| 曲阳县| 西乌珠穆沁旗| 梧州市| 陈巴尔虎旗| 桓台县| 新乡县|