数据库greenDao

转载自:https://www.jianshu.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();

            }

});

    }

/**

* 查询数据库中的所有数据,并显示到适配器上

*/

    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();

    }

/**

* 清空数据库

*/

    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 对象。

// 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO已经帮你做了。

// 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。

// 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。

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

db =mHelper!!.writableDatabase

        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。

        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 // 指定数据库schema版本号,迁移等操作会用到;

        daoPackage'包名.greendao' // dao的包名,包名默认是entity所在的包;

        targetGenDir'src/main/java' // 生成数据库文件的目录;

    }

}

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' //其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如2.2.0

//    implementation 'com.tencent.bugly:nativecrashreport:3.3.1' //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0

// 日志上报和热更新

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

//注释掉原有bugly的仓库

//compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.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' //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.0

    implementation'org.greenrobot:greendao:3.2.2'

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

}

repositories {

mavenCentral()

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容