數(shù)據(jù)庫greenDao

轉載自:http://www.reibang.com/p/1044c9cdcc97


package usung.com.n.greendaodemo;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.text.TextUtils;

import android.view.View;

import android.widget.EditText;

import android.widget.ListView;

import java.util.ArrayList;

import java.util.List;

import usung.com.n.base.BaseApplicationTwo;

import usung.com.n.R;

import usung.com.n.greendao.UserDao;

import usung.com.n.util.ToastUtil;

/**

* @author fenghui

*/

public class MainActivityextends AppCompatActivity {

private ListViewmListView;

? ? private ListmUserList =null;

? ? private MyAdaptermAdapter;

? ? private UsermUser;

? ? private UserDaomUserDao;

? ? @Override

? ? protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

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

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

? ? ? ? loadAllData();

? ? ? ? initView();

? ? }

void initView(){

final EditText edtInsert = findViewById(R.id.edt_insert);

? ? ? ? final EditText edtDelete = findViewById(R.id.edt_delete);

? ? ? ? final EditText edtUpdatet = findViewById(R.id.edt_update);

? ? ? ? final EditText edtQureyName = findViewById(R.id.edt_qurey_name);

? ? ? ? final EditText edtQureyId = findViewById(R.id.edt_qurey_id);

? ? ? ? (findViewById(R.id.insert)).setOnClickListener(new View.OnClickListener() {

@Override

? ? ? ? ? ? public void onClick(View v) {

insert(edtInsert.getText().toString());

? ? ? ? ? ? }

});

? ? ? ? (findViewById(R.id.delete)).setOnClickListener(new View.OnClickListener() {

@Override

? ? ? ? ? ? public void onClick(View v) {

delete(edtDelete.getText().toString());

? ? ? ? ? ? }

});

? ? ? ? (findViewById(R.id.update)).setOnClickListener(new View.OnClickListener() {

@Override

? ? ? ? ? ? public void onClick(View v) {

update(edtUpdatet.getText().toString());

? ? ? ? ? ? }

});

? ? ? ? (findViewById(R.id.qurey)).setOnClickListener(new View.OnClickListener() {

@Override

? ? ? ? ? ? public void onClick(View v) {

qurey(edtQureyId.getText().toString(), edtQureyName.getText().toString());

? ? ? ? ? ? }

});

? ? ? ? (findViewById(R.id.clear)).setOnClickListener(new View.OnClickListener() {

@Override

? ? ? ? ? ? public void onClick(View v) {

clear();

? ? ? ? ? ? }

});

? ? }

/**

* 查詢數(shù)據(jù)庫中的所有數(shù)據(jù),并顯示到適配器上

*/

? ? public void loadAllData(){

mUserDao = BaseApplicationTwo.Companion.getInstance().getDaoSession().getUserDao();

? ? ? ? mUserList =mUserDao.loadAll();

? ? ? ? if (mUserList ==null){

mUserList =new ArrayList<>();

? ? ? ? }

mAdapter =new MyAdapter(this,mUserList);

? ? ? ? mListView.setAdapter(mAdapter);

? ? }

/**

* 增

*/

? ? public void insert(String userName){

if (TextUtils.isEmpty(userName)){

ToastUtil.showToast("請輸入名稱");

return;

? ? ? ? }

mUser =new User(null,userName);

? ? ? ? mUserDao.insert(mUser);

? ? ? ? mAdapter.getmUserList().clear();

? ? ? ? mAdapter.getmUserList().addAll(mUserDao.loadAll());

? ? ? ? mAdapter.notifyDataSetChanged();

? ? ? ? mListView.setSelection(mUserDao.loadAll().size()-1);

? ? }

/**

* 刪

? ? * @param id long

*/

? ? public void delete(String id){

if (TextUtils.isEmpty(id)){

ToastUtil.showToast("id不能為空");

return;

? ? ? ? }

User findUser =mUserDao.queryBuilder().where(UserDao.Properties.Id.eq(id)).build().unique();

? ? ? ? if (findUser !=null){

mAdapter.getmUserList().remove(findUser);

? ? ? ? ? ? mUserDao.deleteByKey(findUser.getId());

? ? ? ? ? ? ToastUtil.showToast("刪除成功");

? ? ? ? }else{

ToastUtil.showToast("用戶不存在");

? ? ? ? }

mAdapter.notifyDataSetChanged();

? ? }

/**

* 改

*/

? ? public void update(String id){

if (TextUtils.isEmpty(id)){

ToastUtil.showToast("id不能為空");

return;

? ? ? ? }

final User findUser =mUserDao.queryBuilder().where(UserDao.Properties.Id.eq(id)).build().unique();

? ? ? ? if (findUser !=null){

findUser.setName("fenghui" + findUser.getId());

? ? ? ? ? ? mUserDao.update(findUser);

? ? ? ? ? ? ToastUtil.showToast("修改成功");

? ? ? ? }else {

ToastUtil.showToast("用戶不存在");

return;

? ? ? ? }

mUserList =mUserDao.loadAll();

? ? ? ? mListView.post(new Runnable() {

@Override

? ? ? ? ? ? public void run() {

mListView.smoothScrollToPosition(findUser.getId().intValue());

? ? ? ? ? ? }

});

? ? ? ? mAdapter.notifyDataSetChanged();

? ? }

/**

* 查辛掠,要么按id查找谢谦,要么按照名稱查找

*/

? ? public void qurey(String id, String name){

mUserList =mAdapter.getmUserList();

? ? ? ? mUserList.clear();

? ? ? ? if (TextUtils.isEmpty(id) && TextUtils.isEmpty(name)){

ToastUtil.showToast("請輸入查詢條件");

? ? ? ? ? ? mAdapter.getmUserList().addAll(mUserDao.loadAll());

? ? ? ? ? ? mAdapter.notifyDataSetChanged();

return;

? ? ? ? }

if (TextUtils.isEmpty(id)){

mUserList.addAll(mUserDao.queryBuilder().where(UserDao.Properties.Name.eq(name)).build().list());

? ? ? ? }else{

mUserList.addAll(mUserDao.queryBuilder().where(UserDao.Properties.Id.eq(id)).build().list());

? ? ? ? }

mAdapter.notifyDataSetChanged();

? ? }

/**

* 清空數(shù)據(jù)庫

*/

? ? public void clear() {

mUserDao.deleteAll();

? ? ? ? mAdapter.getmUserList().clear();

? ? ? ? mAdapter.notifyDataSetChanged();

? ? }

/**

* 跟新ListView,不知為啥adapter.notifyDataSetChanged()沒反應

*/

? ? public void notifyListView(){

mUserList.clear();

? ? ? ? mUserList =mUserDao.loadAll();

? ? ? ? mAdapter =new MyAdapter(MainActivity.this,mUserList);

? ? ? ? mListView.setAdapter(mAdapter);

? ? }

}


// BaseApplication

/**

* Descriptions:

* Created by fenghui on 2018/12/25.

*/

class BaseApplicationTwo : Application() {

override fun onCreate() {

super.onCreate()

instance =this

? ? ? ? setDatabase()

}

companion object {

private var instance : BaseApplicationTwo? =null

? ? ? ? fun getInstance() : BaseApplicationTwo {

return instance!!

}

}

private var db: SQLiteDatabase? =null

? ? private var mDaoMaster:DaoMaster? =null

? ? private var mHelper: DaoMaster.DevOpenHelper? =null

? ? private var mDaoSession: DaoSession? =null

? ? fun setDatabase() {

// 通過 DaoMaster 的內部類 DevOpenHelper释牺,你可以得到一個便利的 SQLiteOpenHelper 對象。

// 可能你已經(jīng)注意到了回挽,你并不需要去編寫「CREATE TABLE」這樣的 SQL 語句没咙,因為 greenDAO已經(jīng)幫你做了。

// 注意:默認的 DaoMaster.DevOpenHelper 會在數(shù)據(jù)庫升級時千劈,刪除所有的表祭刚,意味著這將導致數(shù)據(jù)的丟失。

// 所以墙牌,在正式的項目中涡驮,你還應該做一層封裝,來實現(xiàn)數(shù)據(jù)庫的安全升級喜滨。

? ? ? ? mHelper = DaoMaster.DevOpenHelper(this, "notes-db", null)

db =mHelper!!.writableDatabase

? ? ? ? // 注意:該數(shù)據(jù)庫連接屬于 DaoMaster捉捅,所以多個 Session 指的是相同的數(shù)據(jù)庫連接。

? ? ? ? mDaoMaster = DaoMaster(db)

mDaoSession =mDaoMaster!!.newSession()

}

fun getDaoSession(): DaoSession? {

return mDaoSession

? ? }

fun getDb() : SQLiteDatabase {

return db!!

}

}


// build

applyplugin:'com.android.application'

applyplugin:'kotlin-android'

applyplugin:'org.greenrobot.greendao' // apply plugin

android {

compileSdkVersion27

? ? buildToolsVersion'26.0.2'

? ? defaultConfig {

applicationId "應用id"

? ? ? ? minSdkVersion19

? ? ? ? targetSdkVersion27

? ? ? ? versionCode 1

? ? ? ? versionName "1.0"

? ? ? ? multiDexEnabled =true

? ? ? ? testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

? ? ? ? ndk{

// 設置支持的SO庫架構

? ? ? ? ? ? abiFilters'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'

? ? ? ? }

}

buildTypes {

release {

minifyEnabled false

? ? ? ? ? ? proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

? ? ? ? }

}

greendao{

schemaVersion1 // 指定數(shù)據(jù)庫schema版本號虽风,遷移等操作會用到;

? ? ? ? daoPackage'包名.greendao' // dao的包名棒口,包名默認是entity所在的包;

? ? ? ? targetGenDir'src/main/java' // 生成數(shù)據(jù)庫文件的目錄;

? ? }

}

dependencies {

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

implementation'com.android.support:appcompat-v7:27.1.1'

? ? implementation'com.android.support.constraint:constraint-layout:1.1.3'

? ? testImplementation'junit:junit:4.12'

? ? androidTestImplementation'com.android.support.test:runner:1.0.2'

? ? androidTestImplementation'com.android.support.test.espresso:espresso-core:3.0.2'

//? ? // 日志上報

//? ? implementation 'com.tencent.bugly:crashreport:2.6.6.1' //其中l(wèi)atest.release指代最新Bugly SDK版本號辜膝,也可以指定明確的版本號无牵,例如2.2.0

//? ? implementation 'com.tencent.bugly:nativecrashreport:3.3.1' //其中l(wèi)atest.release指代最新Bugly NDK版本號,也可以指定明確的版本號厂抖,例如3.0

// 日志上報和熱更新

? ? compile"com.android.support:multidex:1.0.3" // 多dex配置

//注釋掉原有bugly的倉庫

//compile 'com.tencent.bugly:crashreport:latest.release'//其中l(wèi)atest.release指代最新版本號茎毁,也可以指定明確的版本號,例如1.3.4

? ? compile'com.tencent.bugly:crashreport_upgrade:1.3.5'

? ? implementation'com.tencent.tinker:tinker-android-lib:1.9.6'

? ? implementation'com.tencent.bugly:nativecrashreport:3.3.1' //其中l(wèi)atest.release指代最新Bugly NDK版本號忱辅,也可以指定明確的版本號七蜘,例如3.0

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

? ? compile"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // greendao

}

repositories {

mavenCentral()

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耕蝉,隨后出現(xiàn)的幾起案子崔梗,更是在濱河造成了極大的恐慌夜只,老刑警劉巖垒在,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扔亥,居然都是意外死亡场躯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門旅挤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踢关,“玉大人,你說我怎么就攤上這事粘茄∏┪瑁” “怎么了秕脓?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長儒搭。 經(jīng)常有香客問我吠架,道長,這世上最難降的妖魔是什么搂鲫? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任傍药,我火速辦了婚禮,結果婚禮上魂仍,老公的妹妹穿的比我還像新娘拐辽。我一直安慰自己,他們只是感情好擦酌,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布俱诸。 她就那樣靜靜地躺著,像睡著了一般仑氛。 火紅的嫁衣襯著肌膚如雪乙埃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天锯岖,我揣著相機與錄音介袜,去河邊找鬼。 笑死出吹,一個胖子當著我的面吹牛遇伞,可吹牛的內容都是我干的。 我是一名探鬼主播捶牢,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸠珠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了秋麸?” 一聲冷哼從身側響起渐排,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灸蟆,沒想到半個月后驯耻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡炒考,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年可缚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斋枢。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡帘靡,死狀恐怖,靈堂內的尸體忽然破棺而出瓤帚,到底是詐尸還是另有隱情描姚,我是刑警寧澤涩赢,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站轩勘,受9級特大地震影響谒主,放射性物質發(fā)生泄漏。R本人自食惡果不足惜赃阀,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一霎肯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榛斯,春花似錦观游、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至王凑,卻和暖如春搪柑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背索烹。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工工碾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人百姓。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓渊额,卻偏偏與公主長得像,于是被迫代替她去往敵國和親垒拢。 傳聞我的和親對象是個殘疾皇子旬迹,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容