一、.as配置环境
1.项目的gradle文件
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath
'com.android.tools.build:gradle:2.2.2'
classpath
'org.greenrobot:greendao-gradle-plugin:3.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
2.app gradle文件
apply
plugin:
'org.greenrobot.greendao'
greendao {
schemaVersion 1
}
compile
'org.greenrobot:greendao:3.2.0'
compile
'net.zetetic:android-database-sqlcipher:3.5.4'二、初始化
1.建立实体类,然后build 然后make project
@Entity
public class User {
@Id
private Long
id;
private String
name;
private String
sex;
private String
age;
}注意事项:
@Entity 必须要 @Id 必须要相当于主键,赋值时可以不用管,构造函数传null也行
2.自己写一个
Application,如果数据库不加密的话变量设置成false,且不需要引入
compile
'net.zetetic:android-database-sqlcipher:3.5.4'这个包
public class App
extends Application {
/** A flag to show how easily you can switch from standard SQLite to the encrypted SQLCipher. */
public static final boolean ENCRYPTED =
false;
private DaoSession
daoSession;
@Override
public void onCreate() {
super.onCreate();
MopenHelper helper =
new MopenHelper(
this,
ENCRYPTED ?
"notes-db-encrypted" :
"notes-db");
Database db =
ENCRYPTED ? helper.getEncryptedWritableDb(
"super-secret") : helper.getWritableDb();
daoSession =
new DaoMaster(db).newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}
注意事项:
MopenHelper是自己定义的继承自,此处数据库升级操作需要。点击make project 会自动生成2个文件
DaoSession.java DaoMaster.java 这2个文件和实体类在一个文件夹下,在gradlegreendao {
schemaVersion 1
}中这里配置路径,如果不配置,默认和实体类一个文件夹,默认隐藏文件,但是如果在自己的appclition中像点击源码方式查看还是能进入这2个文件的,如果配置了路径则不会隐藏。
3.使用
在activity中
private UserDao
userDao; oncreate中获取对象
App application = (App) getApplication();
DaoSession daoSession = application.getDaoSession();
userDao = daoSession.getUserDao();
操作:
switch (v.getId()){
case R.id.
btn001:
//查询
List<User> users =
userDao.loadAll();
StringBuilder stringBuilder=
new StringBuilder();
if (users.size()>
0){
for(
int i=
0;i<users.size();i++){
User user = users.get(i);
stringBuilder.append(user.getName()+
""+user.getSex()+
"id:"+user.getId()+
"age:"+user.getAge());
}
text001.setText(stringBuilder.toString());
}
//Toast.makeText(this, BuildConfig.appKey,Toast.LENGTH_SHORT).show();
break;
case R.id.
btn002:
//修改
User userx=
new User();
userx.setId(
1L);
userx.setName(
"hu");
userx.setSex(
"男");
userDao.update(userx);
break;
case R.id.
btn003:
//删除
//userDao.deleteByKey(1l);
break;
case R.id.
btn004:
//增加
User userz=
new User(
null,
"hu11",
"女",
"18");
userDao.insert(userz);
break;
default:
break;
}更多操作自己摸索 不复杂的
四、关于数据库升级
继承
DaoMaster.DevOpenHelper
然后重写
onUpgrade方法。在里面进行升级操作
例子:此处user 本来只有 private Long
id;
private String
name;
private String
sex;这个三个字段。如何加入一个新的字段age,且保留原始数据首先直接把user实体类中自动生成的代码全部删掉,然后添加user字段,然后重新make project。然后在在自定义的
public class MopenHelper
extends DaoMaster.DevOpenHelper {
public MopenHelper(Context context, String name) {
super(context, name);
}
public MopenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(Database db,
int oldVersion,
int newVersion) {
if(oldVersion<=
1){
db.execSQL(
" ALTER TABLE User ADD COLUMN age");
}
}
}注意事项:
onUpgrade里面原来有一句代码,super(xxx,xxx,xx)这个是调用父类的onUpgrade方法
,此处必须删掉,因为父类里面是先删除全部表,再新建全部表,显然不能保存原始数据库数据,这也是必须自定义MopenHelper的原因。此处我们执行自己的sql逻辑,原始数据由于没有age字段,在新表里面age就是null。最后把gradle中的greendao {
schemaVersion 1
}版本号 改成比1大的就行了,然后升级app就会发现原始数据并没有被删除
转载请注明原文地址: https://ju.6miu.com/read-500333.html