1. 程式人生 > >Android資料庫框架設計一

Android資料庫框架設計一

前言

Android開發中我們或多或少都會接觸到資料庫。Android中提供了一個佔用記憶體極小的關係型資料庫-SQLite。雖然Android系

統中提供了許多操作SQLite的API,但是我們還是需要手動去編寫SQL語句,這經常會出現一些莫名其妙的問題。所以便出現了

許多ORM(物件關係對映)框架。其中比較著名的有GreenDao、OrmLite、Litepal等。

    常用的資料框架:

資料庫框架訪問地址

基於自己對框架的理解:

1.建立註解


註解的解釋
annotatio作用
DbField用來控制建立資料庫列表的欄位
DbTable用來控制資料庫表名
@Target(ElementType.TYPE)    //申明類
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) //申明屬性



2.建立bean及資料庫表







程式碼
@DbTable("tb_student")
public class Student {
@DbField("_id")
private Integer id;
    private String age;
    private String sex;
    private String hight;

    public Student(String age, String sex, String hight) {
this.age = age; this.sex = sex; this.hight = hight; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex;
} public void setSex(String sex) { this.sex = sex; } public String getHight() { return
hight; } public void setHight(String hight) { this.hight = hight; } }


/**
 * 規範所有的資料庫操作
 */
public interface IBaseDao<T> {
/**
     * 插入資料
     * @param entity
* @return
*/
long insert(T entity);

    /**
     * 更新資料
     * @param entity
* @param where
* @return
*/
long update(T entity,T where);

    /**
     *刪除資料
     * @param where
* @return
*/
int delete(T where);

    /**
     * 查詢資料
     * @param where
* @return
*/
List<T> query(T where);
    List<T> query(T where,String orderBy,Integer startIndex,Integer limit);
    List<T> query(String sql);
}


/**
 * @author :created by ${yangpf}
 * 時間:2018/6/8 19
 * 郵箱:[email protected]
 * 建立資料庫表
 */
public class BaseDao<T> implements IBaseDao<T> {
/**
     * 持有資料庫操作的引用
     */
private SQLiteDatabase sqLiteDatabase;
    /**
     * 表名
     */
private String tableName;
    /**
     * 持有操作資料庫所對應的java型別
     */
private Class<T> entityClass;
    /**
     * 標識:用來表示是否做過初始化操作
     */
private boolean isInit=false;
    /**
     * 定義一個快取空間(key-欄位名    value-成員變數)
     */
private HashMap<String ,Field> cacheMap;


    /**
     *
     * @param sqLiteDatabase
* @param entityClass
* @return
*/
protected boolean init(SQLiteDatabase sqLiteDatabase, Class<T> entityClass) {
this.sqLiteDatabase = sqLiteDatabase;
        this.entityClass = entityClass;
        //可以根據傳入的entityClass型別來建立表,只需要建一次
if(!isInit){
//自動建表
            //取到表名
if(entityClass.getAnnotation(DbTable.class)==null){
//反射到類名
tableName=entityClass.getSimpleName();
            }else{
//取註解上的名字 tb_student
tableName=entityClass.getAnnotation(DbTable.class).value();
            }
if(!sqLiteDatabase.isOpen()){
return false;
            }
//執行建表操作
            //create table if not exists tb_student(_id integer,age varchar(20),sex varchar(20),hight varchar(20))
            //單獨用個方法來生成create命令
String createTableSql=getCreateTableSql();
            sqLiteDatabase.execSQL(createTableSql);
            cacheMap=new HashMap<>();
            initCacheMap();
            isInit=true;
        }
return isInit;
    }




public class BaseDaoFactory {
private static final BaseDaoFactory ourInstance = new BaseDaoFactory();

    public static BaseDaoFactory getOurInstance() {
return ourInstance;
    }
private SQLiteDatabase sqLiteDatabase;
    /**
     * 定義建立資料的路徑
     * 建議寫到SD卡中,好處,APP讓刪除了,下次再安裝的時候,資料還在
     */
private String sqliteDatabasePath;

    private BaseDaoFactory() {
//可以先判斷有沒有SD卡
sqliteDatabasePath = "data/data/com.retrofit.androidsqlliteutils/test.db";
        sqLiteDatabase = SQLiteDatabase.openOrCreateDatabase(sqliteDatabasePath, null);
    }
/**
     * 用來生產basedao物件
     */
public <T> BaseDao<T> getBaseDao(Class<T> entityClass) {
BaseDao baseDao = null;
        try {
baseDao = BaseDao.class.newInstance();
            baseDao.init(sqLiteDatabase, entityClass);
        } catch (InstantiationException e) {
e.printStackTrace();
        } catch (IllegalAccessException e) {
e.printStackTrace();
        }
return baseDao;
    }
}

檢查是否成功
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
    super.setContentView(R.layout.activity_main);

    initView();
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.vt_insertData) {
BaseDao baseDao = BaseDaoFactory.getOurInstance().getBaseDao(Student.class);
        baseDao.insert(new Student("18", "男", "1.8米"));
    }
}
private void initView() {
vtInsertData = (TextView) findViewById(R.id.vt_insertData);
    vtInsertData.setOnClickListener(MainActivity.this);
    Toast.makeText(this,"新增成功",Toast.LENGTH_LONG).show();
}

檢查結果:

 使用SQLite工具開啟test.db


到此成功!!!   後續補充

相關推薦

Android資料庫框架設計

前言Android開發中我們或多或少都會接觸到資料庫。Android中提供了一個佔用記憶體極小的關係型資料庫-SQLite。雖然Android系統中提供了許多操作SQLite的API,但是我們還是需要手動去編寫SQL語句,這經常會出現一些莫名其妙的問題。所以便出現了許多ORM

Android資料庫框架、GreenDao

簡述:greenDAO 是一個將物件對映到 SQLite 資料庫中的輕量且快速的 ORM 解決方案。 其優點還包括以下幾點: 1.存取速度快;  2.支援資料庫加密;  3.輕量級;  4.啟用實體;  5.支援快取;  6.程式碼自動生成; 7.greenDAO 支援 pr

Android 資料庫框架litepal的使用

來源:郭霖大神http://blog.csdn.net/guolin_blog/article/details/38461239 要想熟練地操作任何一個數據庫,最最基本的要求就是要懂SQL語言,這也是每個程式設計師都應該掌握的技能。雖說SQL博大精深,要想精通確實很難,但最基本的一

Android 資料庫框架GreenDao與LitePal

更多幹貨 分散式實戰(乾貨) spring cloud 實戰(乾貨) mybatis 實戰(乾貨) spring boot 實戰(乾貨) React 入門實戰(乾貨) 構建中小型網際網路企業架構(乾貨) python 學習持

Android 資料庫框架 DBFlow 的使用

原文首發於微信公眾號:jzman-blog,歡迎關注交流! DBFlow 是一個基於註解處理器開發的使用方便的 ORM Android 資料庫,該庫簡化了很多多餘的程式碼,並且提供了好用的 API 來處理與資料庫的互動,讓開發者專注 App 的開發。下面將從以下幾個方面

Android資料庫框架-Archiver(LiteOrm)的使用

轉自:Android資料庫框架-Archiver(LiteOrm)的使用  在Android開發中,大家開發不同專案,不同的專案就不有不同需求。但是不管是什麼專案都會涉及到資料儲存。比如SharePreferences,SQLite,File等方式。但是我最近開

Android 資料庫綜述(資料庫片的升級與資料的遷移操作

Android 資料庫綜述(一) 資料庫片的升級與資料的遷移操作 SQLiteOpenHelper 是 Android平臺提供給我們一個數據庫輔助類來建立或開啟資料庫 onCreate(SQLiteDatabase db) : 當資料庫被首次建立時執行該方法,一般將建立

Android資料庫框架GreenDao&Realm實戰分析

Android開發的童鞋應該都知道,使用官方的SQLite資料庫,可以滿足我們大部分增刪改查的需求,然而隨著Android技術的逐步成長,你會慢慢發現SQLite越來越不能滿足我們的需求。總結為以下主要幾點: 1、創表,增刪改查需要些大量程式碼,開發效率極低

Android網路框架設計

一、構建思路 1、構建一個Request用來封裝 HTTP請求的型別、請求頭引數、請求體、優先順序、返回型別、等一些必要的屬性。 這個Request定義為抽象的,使得使用者可以擴充套件。 2、構建一個佇列(BlockingQueue) 用來存貯這些請求,使用

Android-資料庫框架彙總

一:OrmLite簡述: 優點: 1.輕量級;2.使用簡單,易上手;3.封裝完善;4.文件全面。缺點:1.基於反射,效率較低(本人還沒有覺得效率低);2.缺少中文翻譯文件整合方法:把jar包複製到as的libs資料夾下,並且引用jar包即可用於學習的相關部落格:我的部落格總結

Android MVP框架設計(1)

1.介面設計 V:定義資料處理規範的介面 public interface IHandler<T> { void onBefore(); //載入前 void setData(T data); //View層呼叫

Android 資料庫開發()SQLite3概述

前言 SQLite是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案,設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在Android、iOS等

android資料庫框架LitePal的簡單使用

GitHub地址:https://github.com/LitePalFramework/LitePal 步驟1:下載 compile 'org.litepal.android:core:1.4.0' 步驟2: 配置檔案litepal.xml 在 assets 資料夾

Android 資料庫框架 —— GreenDao

package cn.hlq.greendaostudy.entity; import org.greenrobot.greendao.annotation.Entity; import org.greenrobot.greendao.annotation.Id; import org.greenrobot

遊戲UI框架設計() : 架構設計理論篇

遊戲UI框架設計(一) ---架構設計理論篇   前幾天(2017年2月)看到一篇文章,國內王健林、馬雲等大咖們看好的未來十大最有“錢途”產業中,排名第一的就是“泛娛樂”。 所以我們發現最近幾年無論是BAT企業還是萬達等,都紛紛投資遊戲、電影、動漫等泛娛樂產業。

Android EventBus框架)之使用詳細介紹

研發DEMO背景 最近開發專案遇到一個情景,就是在APP主頁MainActivity展示列表,有收藏功能,但是點收藏的時候,需要當前使用者是已經登入身份,因此當用戶點選列表item收藏按鈕時,如果使用者沒有登入,便會跳轉到APP的登入頁(LoginActivi

Android資料庫框架greenDao學習筆記 2

引言 上篇部落格中介紹了greenDao的整合方式,這篇部落格,我們介紹如何使用greenDao建立我們需要的資料表。補一張圖(來自官網),來理解greenDao,大家意會吧。 註解 先上一張圖,來對greenDao的註解有一個直觀的認識: Schema 通過在Gr

Android路由框架設計與實現

http://www.sixwolf.net/blog/2016/03/23/Android%E8%B7%AF%E7%94%B1%E6%A1%86%E6%9E%B6%E8%AE%BE%E8%AE%A1/

LitePal——Android資料庫框架完整使用手冊

LitePal for Android LitePal是一個開源的Android庫,使開發人員使用SQLite資料庫非常簡單。您無需編寫任何SQL語句就可以完成大部分資料庫操作,包括建立或升級表,增、刪、改、查操作,合計函式等。LitePal的設定也很簡單,您只許5分中

Android多執行緒操作sqlite資料庫連線池框架設計思路

我們在Android應用程式開發當中經常會用到資料庫,一般在有兩種主要開發思路。 第一種:每次需要對資料庫操作的時候建立連線,操作完成後,馬上關閉連線。 這個方式一般用於不怎麼頻繁操作資料庫的情況,用完後馬上關閉達到節省系統資源的目的。 第二種:應用程式一