目前对数据库操作的开源库也不少,用的比较多的比如Realm,greenDao。就我目前使用时greenDao写下一些关于自己的看法,其实开源库就是为了更加的方便,便捷。所以操作起来也是比较的容易。
我目前使用的版本是3.2.2
**1.在project的gradle中配置**
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
}
**2.在app的gradle中配置**
greendao {
schemaVersion 1//<--数据库的版本,用于升级时候进行更改(更改表结构的时候记得升级)
daoPackage 'com.usher.greendao_demo.greendao.gen'//这个是自动生成代码保存的包名
targetGenDir 'src/main/java'//保存到java代码路径
}
dependencies {
compile 'org.greenrobot:greendao:3.2.2' // add library
compile 'com.github.yuweiguocn:GreenDaoUpgradeHelper:v1.4.0'//这是我目前使用的一个版本升级的库
}
配置完成之后的操作就比较的easy了(仅限我目前简单的操作)
1.单表操作
首先,肯定是写一个实体类啦。
@Entity
public class User {
@Id(autoincrement = true)//id自增长
private Long id;
private String name;
//后面的内容Ctrl+F9(或者工具栏build下面的Make Project)会自动生成啦
.
.
.
}
注解:
@Entity 标识实体类,greenDAO会映射成sqlite的一个表,表名为实体类名的大写形式
@Id 标识主键,该字段的类型为long或Long类型,autoincrement设置是否自动增长
@NotNull 设置表中当前列的值不可为空
《更多属性可以百度》
然后就会自动生成一个包,就是之前在gradle里面配置的。
接下来就可以多数据库进行操作啦。
一般先在Application中进行初始化
//初始化数据库
GreenDaoManager.getInstance();
我的话是写了一个helper对数据库进行管理,也就是我之前添加的那一个依赖库
public class MySQLiteOpenHelper extends DaoMaster.OpenHelper {
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
super.onUpgrade(db, oldVersion, newVersion);
MigrationHelper.migrate(db,... );//这里写入自动生成的Dao的类名
}
}
然后写一个Manager进行管理
public class GreenDaoManager {
//数据库的名称
private static final String DB_NAME="greenDao";
private static GreenDaoManager mInstance;
private DaoMaster daoMaster;
private DaoSession daoSession;
public static GreenDaoManager getInstance(){
if(mInstance==null){
synchronized (GreenDaoManager.class){
if(mInstance==null){
mInstance =new GreenDaoManager();
}
}
}
return mInstance;
}
private GreenDaoManager(){
if(mInstance==null){
MySQLiteOpenHelper helper =new MySQLiteOpenHelper(SamApplication.getContext(),DB_NAME,null);
Database db = helper.getWritableDb();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
}
}
public DaoSession getDaoSession(){
return daoSession;
}
public DaoMaster getDaoMaster(){
return daoMaster;
}
}
然后就可以对数据库进行增删改查啦,依然贴上代码(一个简单的Dao)。。。
public class UserDao {
private final GreenDaoManager daoManager;
private static UserDao mUserDao;
public UserDao(){
daoManager = GreenDaoManager.getInstance();
}
public static UserDao getInstance(){
if(mUserDao==null){
mUserDao =new UserDao();
}
return mUserDao;
}
/**
* 插入或替换数据
* @param userInfo
* @return
*/
public boolean insertOrReplaceData(UserInfo userInfo){
boolean flag =false;
try{
flag = getUserInfoDao().insertOrReplace(userInfo)==-1?false:true;
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 根据id删除数据
* @param userInfo
* @return
*/
public boolean deleteUserData(UserInfo userInfo){
boolean flag =false;
try{
getUserInfoDao().delete(userInfo);
flag =true;
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 删除数据库中所有数据
* @return
*/
public boolean deleteAllData(){
boolean flag =false;
try{
getUserInfoDao().deleteAll();
flag =true;
}catch (Exception e){
e.printStackTrace();
}
return flag;
}
/**
* 根据主键查询
* @param key
* @return
*/
public UserInfo queryUserDataById(long key){
return getUserInfoDao().load(key);
}
/**
* 查询数据库中所有数据
* @return
*/
public List<UserInfo> queryAllData(){
return getUserInfoDao().loadAll();
}
public UserInfoDao getUserInfoDao(){
return daoManager.getDaoSession().getUserInfoDao();
}
}
单表的操作就完成了,是不是感觉很easy.
多表操作的话其实就是一个主键外键的关联,主表的主键对应子表的外键。
比如:
一个Teacher对应有很多的student
@Entity
public class Teacher{
@Id()
private Long id;
private String name;
//后面的内容Ctrl+F9(或者工具栏build下面的Make Project)会自动生成啦
@ToMany(referencedJoinProperty = "sid")
}
@Entity
public class Student{
@Id(autoincrement = true)
private Long id;
private Long sid;//他的外键与主表的主键相同。那么就关联起来了
private String name;
}
后面的操作就和单表操作是一样的了。目前我也是刚刚学习,有什么错误或者不足望指正。