Android GreenDao配置以及使用

GreenDao配置步驟

Project下的build.gradle文件加入

buildscript {

? ? repositories {

? ? ? ? google()

? ? ? ? jcenter()

? ? ? ? mavenCentral() // 添加代碼倉(cāng)庫(kù)? 步驟1

? ? }

? ? dependencies {

? ? ? ? classpath "com.android.tools.build:gradle:4.0.1"

//步驟2

? ? ? ? classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' //本地Greendao數(shù)據(jù)庫(kù)

? ? ? ? // NOTE: Do not place your application dependencies here; they belong

? ? ? ? // in the individual module build.gradle files

? ? }

}

//greendao配置 步驟5 在buildTypes下面添加

? ? greendao {

? ? ? ? //數(shù)據(jù)庫(kù)版本號(hào)占业,升級(jí)時(shí)修改

? ? ? ? schemaVersion 1

? ? ? ? //生成的DAO胜蛉,DaoMaster和DaoSession的包路徑。默認(rèn)與表實(shí)體所在的包路徑相同

? ? ? ? daoPackage 'com.example.xts.greendaodemo.db'

? ? ? ? //生成源文件的路徑。默認(rèn)源文件目錄是在build目錄中的(build/generated/source/greendao)

? ? ? ? targetGenDir 'src/main/java'

? ? }

Module下的build.gradle文件加入

apply plugin: 'com.android.application'

apply plugin: 'org.greenrobot.greendao' // apply plugin 步驟3

android {

........

//greendao配置? 步驟5

? ? greendao {

? ? ? ? //數(shù)據(jù)庫(kù)版本號(hào)宜咒,升級(jí)時(shí)修改

? ? ? ? schemaVersion 1

? ? ? ? //生成的DAO,DaoMaster和DaoSession的包路徑。把com.example.xts.greendaodemo修改為與表實(shí)體所在的包路徑相同(自己的項(xiàng)目主包路徑)

? ? ? ? daoPackage 'com.mypro.db'

? ? ? ? //生成源文件的路徑。默認(rèn)源文件目錄是在build目錄中的(build/generated/source/greendao)

? ? ? ? targetGenDir 'src/main/java'

? ? }

}

dependencies {

? ? implementation fileTree(dir: 'libs', include: ['*.jar'])

? ? implementation 'androidx.appcompat:appcompat:1.1.0'

? ? implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

? ? testImplementation 'junit:junit:4.12'

? ? androidTestImplementation 'androidx.test.ext:junit:1.1.1'

? ? androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

//greenDAO配置? 步驟4

? ? implementation 'org.greenrobot:greendao:3.2.2' // add library

? ? implementation 'org.greenrobot:greendao-generator:3.2.2'

}


//第六步地啰,

//建bean類 實(shí)體類和數(shù)據(jù)庫(kù)對(duì)應(yīng),讲逛,添加相關(guān)注解亏吝,,然后編譯項(xiàng)目生成相關(guān)文件? 錘項(xiàng)目

@Entity

public class ColltionDbBean{

? ? @Id(autoincrement = true)

? ? private long id;

? ? private String title;

? ? ? private String urlPath;

}


//第七步盏混,

//創(chuàng)建一個(gè)自己的application類蔚鸥,在application中完成DaoSession的初始化惜论,避免以后重復(fù)初始化,便于使用? 止喷,馆类,,要配置到清單中

public class BaseApp extends Application {

? ? private static BaseApp sInstance;

? ? private DaoMaster.DevOpenHelper mHelper;

? ? private DaoMaster mDaoMaster;

? ? private DaoSession mDaoSession;

? ? @Override

? ? public void onCreate() {

? ? ? ? super.onCreate();

? ? ? ? sInstance = this;

? ? ? ? setDatabase();

? ? }

? ? ? ? /**

? ? ? ? * 設(shè)置greenDao

? ? ? ? */

? ? private void setDatabase() {

? ? ? ? //通過(guò)DaoMaster內(nèi)部類DevOpenHelper可以獲取一個(gè)SQLiteOpenHelper 對(duì)象

? ? ? ? // 可能你已經(jīng)注意到了弹谁,你并不需要去編寫(xiě)「CREATE TABLE」這樣的 SQL 語(yǔ)句蹦掐,因?yàn)?greenDAO 已經(jīng)幫你做了。

? ? ? ? // 注意:默認(rèn)的 DaoMaster.DevOpenHelper 會(huì)在數(shù)據(jù)庫(kù)升級(jí)時(shí)僵闯,刪除所有的表,意味著這將導(dǎo)致數(shù)據(jù)的丟失藤滥。

? ? ? ? // 所以鳖粟,在正式的項(xiàng)目中,你還應(yīng)該做一層封裝拙绊,來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的安全升級(jí)向图。

? ? ? ? // 此處MyDb表示數(shù)據(jù)庫(kù)名稱 可以任意填寫(xiě)

? ? ? ? mHelper = new DaoMaster.DevOpenHelper(this, "MyDb", null);? ? // MyDb是數(shù)據(jù)庫(kù)的名字,更具自己的情況修改

? ? ? ? SQLiteDatabase db = mHelper.getWritableDatabase();

? ? ? ? mDaoMaster = new DaoMaster(db);

? ? ? ? mDaoSession = mDaoMaster.newSession();

? ? }

? ? public static BaseApp getInstance(){

? ? ? ? return sInstance;

? ? }

? ? public DaoSession getDaoSession(){

? ? ? ? return mDaoSession;

? ? }

}


使用方法

數(shù)據(jù)庫(kù)的操作包括增刪改改查标沪,方法如下:

package com.jackie.greendao;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ListView;

import java.util.List;publicclass MainActivity extends AppCompatActivity implements View.OnClickListener {

? ? private EditText mName, mAge;

? ? private Button mAdd;

? ? private ListView mListView;

? ? private DaoMaster.DevOpenHelper mDevOpenHelper;

? ? private DaoMaster mDaoMaster;

? ? private DaoSession mDaoSession;

? ? private PersonDao mPersonDao;

? ? @Override

? ? protectedvoid onCreate(Bundle savedInstanceState) {

? ? ? ? super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_main);

? ? ? ? initView();

? ? ? ? initEvent();

? ? ? ? openDb();

? ? }

? ? privatevoid initView() {

? ? ? ? mName = (EditText) findViewById(R.id.name);

? ? ? ? mAge = (EditText) findViewById(R.id.age);

? ? ? ? mAdd = (Button) findViewById(R.id.add);

? ? ? ? mListView = (ListView) findViewById(R.id.list_view);

? ? }

? ? privatevoid initEvent() {

? ? ? ? mAdd.setOnClickListener(this);

? ? }

? ? privatevoid openDb() {

? ? ? ? mDevOpenHelper =newDaoMaster.DevOpenHelper(this,"person.db",null);

? ? ? ? mDaoMaster =new DaoMaster(mDevOpenHelper.getWritableDb());

? ? ? ? mDaoSession = mDaoMaster.newSession();

? ? ? ? mPersonDao = mDaoSession.getPersonDao();

? ? }

? ? //插入publicvoid insert() {

? ? ? ? Person person =newPerson(Long.valueOf(1), mName.getText().toString(),

? ? ? ? ? ? ? ? Integer.parseInt(mAge.getText().toString()));

? ? ? ? mPersonDao.insert(person);

? ? ? ? mName.setText("");

? ? ? ? mAge.setText("");

? ? }

? ? publicvoid delete(Person person) {

? ? ? ? mPersonDao.delete(person);

? ? }

? ? //更新publicvoid update(Person person) {

? ? ? ? mPersonDao.insertOrReplace(person);

? ? }

? ? //查詢publicvoid query() {

? ? ? ? List persons = mPersonDao.queryBuilder().list();

? ? }

? ? @Override

? ? publicvoid onClick(View view) {

? ? ? ? switch (view.getId()) {

? ? ? ? ? ? case R.id.add:

? ? ? ? ? ? ? ? insert();

? ? ? ? ? ? ? ? break;

? ? ? ? }

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末榄攀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子金句,更是在濱河造成了極大的恐慌檩赢,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件违寞,死亡現(xiàn)場(chǎng)離奇詭異贞瞒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)趁曼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)军浆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挡闰,你說(shuō)我怎么就攤上這事乒融。” “怎么了摄悯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵赞季,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我射众,道長(zhǎng)碟摆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任叨橱,我火速辦了婚禮典蜕,結(jié)果婚禮上断盛,老公的妹妹穿的比我還像新娘。我一直安慰自己愉舔,他們只是感情好钢猛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著轩缤,像睡著了一般命迈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上火的,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天壶愤,我揣著相機(jī)與錄音,去河邊找鬼馏鹤。 笑死征椒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的湃累。 我是一名探鬼主播勃救,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼治力!你這毒婦竟也來(lái)了蒙秒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宵统,失蹤者是張志新(化名)和其女友劉穎晕讲,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體马澈,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡益兄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箭券。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片净捅。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辩块,靈堂內(nèi)的尸體忽然破棺而出蛔六,到底是詐尸還是另有隱情,我是刑警寧澤废亭,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布国章,位于F島的核電站,受9級(jí)特大地震影響豆村,放射性物質(zhì)發(fā)生泄漏液兽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望四啰。 院中可真熱鬧宁玫,春花似錦、人聲如沸柑晒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)匙赞。三九已至佛掖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涌庭,已是汗流浹背芥被。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坐榆,地道東北人撕彤。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像猛拴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚀狰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容