Android常用的数据库框架OrmLite,GreenDao,Realm等等,当然数据库语句熟悉的完全可以使用原生的SQLite,但是个人还是喜欢使用GreenDao,方便轻量,支持缓存,支持数据库加密,稍微记录一下,毕竟不是所有的项目都使用数据库,很多项目SP就能完全够用,
环境配置:
在project的build.gradle文件里
dependencies {
.....
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
在App的build.gradle文件下进行如下配置 (注释的地方就是要添加的东西)
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
android {
........
defaultConfig {
........
}
greendao {
schemaVersion 1 //数据库版本
targetGenDir 'src/main/java' //指定生成代码的目录
daoPackage //生成代码到具体包下
}
}
dependencies {
...............
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
环境配置完毕,然后同步一下,ok了
在Application里面配置创建数据库
public class MyApplication extends Application {
private static DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
......
initDatebase();
}
private void initDatebase(){
//创建数据库user.db
DaoMaster.DevOpenHelper helper=new DaoMaster.DevOpenHelper(this,"user.db",null);
//获取可写数据库
SQLiteDatabase db=helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster=new DaoMaster(db);
//获取Dao对象管理者
daoSession=daoMaster.newSession();
}
public static DaoSession getDaoInstant(){
return daoSession;
}
}
数据库创建好了,然后就是建表,GreenDao3.0之前还是有点麻烦,3.0之后就直接写实体类,用注解就好了
@Entity //@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
public class User {
//@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
@Id(autoincrement = true)
private Long id;
//@Unique:该属性值必须在数据库中是唯一值
//@NotNull:属性不能为空
@Unique @NotNull
private int UserId;
private String userName;
private String userHead;
private int age;
private String Token;
//@Property:可以自定义字段名,注意外键不能使用该属性
//@Transient:使用该注释的属性不会被存入数据库的字段中
//@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
}
写好注解build一下实体类会生成get,set方法和DaoMaster,DaoSession,HistoryDataDao类
----增删改查
增
MyApplication.getDaoInstant().getUserDao().insert(user);
删
MyApplication.getDaoInstant().getUserDao().deleteByKey(id);
改
MyApplication.getDaoInstant().getUserDao().update(user);
查
MyApplication.getDaoInstant().getUserDao().loadAll();
对了数据库创建新表什么的,在配置数据库版本的时候要+1
一对一建表,通过外键与另外一个表建立关系,在上面User表中添加
@Entity //@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
public class User {
//@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
@Id(autoincrement = true)
private Long id;
//@Unique:该属性值必须在数据库中是唯一值
//@NotNull:属性不能为空
@Unique @NotNull
private int UserId;
private String userName;
private String userHead;
private int age;
private String Token;
private long BI_ID ;
@ToOne(joinProperty = "BI_ID") //1对1,当然也有 一对多的 @ToMany
private BankInfo bankinfo;
//@Property:可以自定义字段名,注意外键不能使用该属性
//@Transient:使用该注释的属性不会被存入数据库的字段中
//@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
}
bankInfo实体类
@Entity
public class BankInfo {
@Id
private Long id;
private int bankId;
private String bankName;
}
查询语句通过
MyApplication.getDaoInstant().getBankInfoDao().queryBuilder()
.where(BankInfoDao.Properties.Id.eq(BI_ID)).list();
能查询到对应BI_ID 的银行卡信息数据