GreenDao
GreenDao3.1.0使用案例包含(增刪查改,升級數(shù)據(jù)庫),3.+版本比2.+更加便捷生成DaoMaster和DaoSession
本文項目地址
首先讓你的android studio配置Greendao數(shù)據(jù)庫
在build.gradle目錄下
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
}
在app/build.gradle目錄下設置
apply plugin: 'org.greenrobot.greendao'
android {
greendao{
schemaVersion 1 //數(shù)據(jù)庫 版本號
targetGenDir 'src/main/java' //生成DaoMaster類文件夾
daoPackage 'com.ppjun.greendaotest.db' //生成DaoMaster類包名
}
}
dependencies {
compile 'org.greenrobot:greendao:3.1.0'
}
新建一個User類
@Entity
public class User {
@Id
private Long id;
@Property(nameInDb = "username")
private String userName;
@Property(nameInDb = "password")
private String passWord;
//generate set和get方法 toString方法
...
}
- @Entity 代表數(shù)據(jù)庫里面的USER表
- @Id 主鍵
- @Property 表里面的內容
- @Unique 唯一的
- @Transient 不會被數(shù)據(jù)庫持久化寫進數(shù)據(jù)庫
- @NotNull 不為空
到此為止帐偎,sync gradle來執(zhí)行greendao配置,下面開始講解怎么使用
GreenDao使用
如果遇到在生產(chǎn)包下找不到DaoMaster等文件私股,配置完上述代碼要先Run一下刷允。才開始下面代碼冤留。
public static final String DB_NAME = "ppjun.db";//數(shù)據(jù)庫名稱
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);//實例化一個DevOpenhelper,相當于sqlit的SQliteOpenHelper
DaoMaster daoMaster = new DaoMaster(helper.getWritableDb());//實例化DaoMaster
DaoSession daoSession = daoMaster.newSession();//實例化DaoSession
UserDao userDao =daoSession.getUserDao(); //獲取UserDao實例來對表user進行操作
//add,這里的null 代表自增長的id树灶,你還可以為user表插入unique的userid
User user1 = new User(null, "ag1", "123456");
User user2 = new User(null, "ag2", "123456");
User user3 = new User(null, "ag3", "123456");
userDao.insert(user1);
userDao.insert(user2);
userDao.insert(user3);
//update纤怒,這里更新id是3的user的名字,id從1開始的天通,在where來添加匹配條件
User user4 = userDao.queryBuilder().where(UserDao.Properties.Id.eq(3)).build().unique();
user4.setUserName("kk");
userDao.update(user4);
//delete泊窘,這里刪除id是2的user
List<User> userList2 = userDao.queryBuilder().where(UserDao.Properties.Id.eq(2)).build().list();
for (User user5 : userList2)
userDao.delete(user5);
//query,重新user表全部user
List<User> userList = userDao.queryBuilder().build().list();
for (User user : userList)
Log.i(TAG, user.toString());
上面完成數(shù)據(jù)庫基本操作像寒。
下面來說GreenDao的升級數(shù)據(jù)庫烘豹,在user表插入age
1、修改build.gradle下面的schemaVersion 2
2诺祸、在user類携悯,新增age對象
public class User {
@Id
private Long id;
@Property(nameInDb = "age")
private int age;
//generate getter and setter & toString
}
3、你要新建一個類MyDBHelper繼承DaoMaster.OpenHelper,在類的構造函數(shù)傳入Context筷笨,super(context,DB_NAME,null);還要重寫onUpgrade方法(注意這里的參數(shù)一是Database)憔鬼,然后創(chuàng)建表(傳入true龟劲,這里使用IF NOT EXISTS)不用擔心表不存在,還有執(zhí)行增加age列sql語句 db.exeSQL("ALTER TABLE USER ADD COLUMN age");
public class MyDBHelper extends DaoMaster.OpenHelper {
public MyDBHelper(Context context) {
super(context, DB_NAME,null);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
super.onUpgrade(db, oldVersion, newVersion);
NoteDao.createTable(db,true);
db.execSQL("ALTER TABLE NOTE ADD COLUMN age");
}
}
這時候的DaoMaster.DevOpenHelper改為自定義DBHelper逊彭,這樣子升級數(shù)據(jù)庫就不會丟失原來的數(shù)據(jù)了
DBHelper dbHelper = new DBHelper(context);
DaoMaster daoMaster = new DaoMaster(dbHelper.getWritableDb());