xutils3 數據庫應用和簡單封裝

說到數據庫,相信Android的小伙伴們已經再熟悉不過了吧!今天我就拋磚引玉的來給大家敘述一番,寫的不好的地方望大家諒解和指出來。

1.引入
1)已經把數據庫部分單獨從xutils3中分離了出來,做成了一個library,如下圖:


2)這個lib我已經放到Github上了,需要的同學,歡迎下載
https://github.com/rapeflower/xutils3-db-lib.git

3)下載完后可以直接將DbLibrary整個文件拷貝到項目的libs目錄下,至于library的使用,這里我就不多說了,相信同學們都知道。

2.使用步驟
1)初始化,在應用程序啟動時初始化,在Application的onCreate()中編寫以下代碼:

DbManager.initDbConfig(Application application, String dbName, int dbVersion, boolean isDebug);

dbName:數據庫名稱
dbVersion:數據庫版本號
isDebug:是否為調試模式,再調試模式下,xutils3會顯示日志信息
2)具體使用

DbManager.xxx();//xxx:對應增刪改查的方法
//例如,增刪改查
//增
DbManager.insert(entity);
//刪
DbManager.delete(entityType, whereBuilder);
//改
DbManager.update(entity, updateColumnNames);
//查
DbManager.queryAll(entityType, whereBuilder);

3.簡單封裝之DbManager,代碼相見

public class DbManager {

    private static DbProxy db = null;
    private static String DB_NAME = "def_db";
    private static int DB_VERSION = 1;

    private DbManager() {

    }

    /**
     * 初始化數據庫及數據庫配置
     *
     * @param application 應用程序對象
     * @param dbName      數據庫名稱
     * @param dbVersion   數據庫版本
     * @param isDebug     是否輸出日志
     */
    public static void initDbConfig(Application application, String dbName, int dbVersion, boolean isDebug) {
        if (application == null) {
            return;
        }
        //初始化數據庫
        x.Ext.init(application);
        //是否輸出debug日志
        x.Ext.setDebug(isDebug);
        //數據庫名稱、版本號
        DB_NAME = dbName;
        DB_VERSION = dbVersion;

        //初始化DbProxy
        db = x.getDb(buildDaoConfig());
    }

    /**
     * DaoConfig
     *
     * @return
     */
    private static DbProxy.DaoConfig buildDaoConfig() {
        //數據庫配置
        DbProxy.DaoConfig daoConfig = new DbProxy.DaoConfig()
                //設置數據庫名
                .setDbName(DB_NAME)
                //設置數據庫版本,每次啟動應用時將會檢查該版本號
                .setDbVersion(DB_VERSION)
                //設置是否開啟事務,默認為false關閉事務
                .setAllowTransaction(true)
                .setTableCreateListener(new DbProxy.TableCreateListener() {
                    //設置數據庫創(chuàng)建時的Listener
                    @Override
                    public void onTableCreated(DbProxy db, TableEntity<?> table) {

                    }
                })
                .setDbUpgradeListener(new DbProxy.DbUpgradeListener() {
                    //發(fā)現數據庫版本低于這里設置的值將進行數據庫升級并觸發(fā)DbUpgradeListener
                    @Override
                    public void onUpgrade(DbProxy db, int oldVersion, int newVersion) {
                        if (newVersion > oldVersion) {
                            try {
                                db.dropDb();
                            } catch (DbException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                });

        return daoConfig;
    }

    /**
     * 檢測DbManager是不是初始化了
     */
    private static void checkDbManager() {
        if (db == null) {
            db = x.getDb(buildDaoConfig());
        }
    }

    /**
     * 獲取DbProxy
     *
     * @return
     */
    public static DbProxy getDbProxy() {
        return db;
    }

    /**
     * 向數據庫插入數據
     *
     * @param data 實體類或實體類的List
     */
    public static void insert(Object data) {
        try {
            checkDbManager();
            db.save(data);
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /***
     * 插入唯一的對象,先刪除,在插入,TODO 要看看這個id怎么變化
     * @param entity
     * @param entityClass
     * @param wb
     */
    public static void insert(Object entity, Class<?> entityClass, WhereBuilder wb) {
        if (wb == null) {
            insert(entity);
            return;
        }
        delete(entityClass, wb);
        insert(entity);
    }

    /**
     * 更新數據庫中的數據
     *
     * @param entity            實體類
     * @param updateColumnNames 修改或更新的字段(對應數據庫表列名)
     */
    public static void update(Object entity, String... updateColumnNames) {
        try {
            checkDbManager();
            db.update(entity, updateColumnNames);
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
    }

    /***
     * 根據條件更新
     * @param entityType
     * @param whereBuilder
     * @param nameValuePairs
     */
    public static void update(Class<?> entityType, WhereBuilder whereBuilder, KeyValue... nameValuePairs) {
        try {
            checkDbManager();
            db.update(entityType, whereBuilder, nameValuePairs);
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
    }

    /**
     * 查詢第一條數據
     *
     * @param entityType 單個表的一條數據封裝的類名
     * @return T 返回數據庫中實體類型對應表的第一條數據
     */
    public static <T> T queryFirst(Class<T> entityType) {
        T t = null;
        try {
            t = db.findFirst(entityType);
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
        return t;
    }

    /**
     * 根據條件查詢第一條數據
     *
     * @param entityType 單個表的一條數據封裝的類名
     * @param wb         查詢條件
     * @return T 返回數據庫中符合條件的實體類型對應表的第一條數據
     */
    public static <T> T queryFirst(Class<T> entityType, WhereBuilder wb) {
        T t = null;
        try {
            t = db.selector(entityType).where(wb).findFirst();
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
        return t;
    }

    /**
     * 根據條件查詢第一條數據
     *
     * @param entityType 單個表的一條數據封裝的類名
     * @param wb         查詢條件
     * @return T 返回數據庫中符合條件的實體類型對應表的第一條數據
     */
    public static <T> T queryFirst(Class<T> entityType, WhereBuilder wb, String columnName) {
        T t = null;
        try {
            t = db.selector(entityType).where(wb).orderBy(columnName).findFirst();
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
        return t;
    }

    /**
     * 查詢所有數據
     *
     * @param entityType 單個表的一條數據封裝的類名
     * @return T
     */
    public static <T> List<T> queryAll(Class<T> entityType) {
        List<T> list = null;
        try {
            checkDbManager();
            list = db.findAll(entityType);
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }

        return list;
    }

    /**
     * 查詢所有數據
     *
     * @param entityType 單個表的一條數據封裝的類名
     * @return T
     */
    public static <T> List<T> queryAll(Class<T> entityType, WhereBuilder wb) {
        List<T> list = null;
        try {
            checkDbManager();
            list = db.selector(entityType).where(wb).findAll();
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }

        return list;
    }

    /**
     * 查詢所有數據
     *
     * @param entityType        單個表的一條數據封裝的類名
     * @param orderByColumnName 排序的列
     * @param limit             限時返回的個數
     * @return T
     */
    public static <T> List<T> queryAll(Class<T> entityType, WhereBuilder wb, String orderByColumnName, boolean desc, int limit) {
        List<T> list = null;
        try {
            checkDbManager();
            list = db.selector(entityType).where(wb).orderBy(orderByColumnName, desc).limit(limit).findAll();
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }

        return list;
    }


    /**
     * 刪除數據
     *
     * @param entityType 數據庫表對應的實體類
     */
    public static void delete(Class<?> entityType) {
        try {
            checkDbManager();
            db.delete(entityType);
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
    }

    /**
     * 刪除數據
     *
     * @param entityType 數據庫表對應的實體類
     * @param wb         刪除條件
     */
    public static void delete(Class<?> entityType, WhereBuilder wb) {
        try {
            checkDbManager();
            db.delete(entityType, wb);
        } catch (DbException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,057評論 25 709
  • 韋小寶這個人是金庸筆下的唯一一個武功不好卻又如魚得水角色。 看過金庸劇的人都知道,韋小寶其人從小在妓院長大,不學無...
    羅小文閱讀 4,100評論 3 23
  • 一件事,想通了是天堂,想不通就是地獄。既然活著,就要活好。有些時候我們由于太小心眼,太在意身邊的瑣事而因小失大,得...
    羅掌柜real閱讀 216評論 0 0
  • 今天天空中的云很白 讓藍色的背景顯得很高很透 風都不知道躲到哪里去了 所以我們出去玩吧 不要辜負了這美麗的天氣
    香蕉酸吶閱讀 137評論 0 0

友情鏈接更多精彩內容