一.关于greenDAO:
1.greenDAO官网:http://greendao-orm.com/
2.项目下载地址:https://github.com/greenrobot/greenDAO
为啥使用greenDAO呢:看人家官网给的图
二.废话不多说,直接开始码代码
第一步.添加依赖:
compile 'de.greenrobot:greendao:2.1.0'
compile 'de.greenrobot:greendao-generator:2.1.0'
第二步,创建一个名为db的包如: :
第三步,自定义一个类,命名一般是 CustomDaoGenerater,码完就run一下,然后喝一杯咖啡(第一次build生成代码挺慢的)
代码:
public class CustomDaoGenerater { public static void main(String[] args) { //1.第一个参数是数据库版本号,第二个参数是数据库的包名 Schema schema = new Schema(1, "com.yl.greendaodemo.db"); //创建表,参数是表名 Entity info = schema.addEntity("Info"); //为表添加字段 info.addIdProperty();//该字段是id默认主键自增长 info.addStringProperty("name"); info.addIntProperty("age"); info.addStringProperty("tel"); //生成数据库相关类 //第二个参数指定生成文件的本次存储路径,AndroidStudio工程指定到当前工程的java路径 try { new DaoGenerator().generateAll(schema,"C:\\Users\\Administrator\\Downloads\\greenDAOdemo\\app\\src\\main\\java"); } catch (Exception e) { e.printStackTrace(); } } }
然后就会生成如图的四个java文件(如果错误请删除db包,回到第二步)
第四步,在Application中通过DaoMaster.DevOpenHelper初始化数据库
代码:(初始化过程最好放在Application中进行,避免创建多个Session)
public class MyApp extends Application { public InfoDao getDao() { return dao; } private InfoDao dao; @Override public void onCreate() { super.onCreate(); setupDatabase(); } /** * 设置数据库 */ private void setupDatabase() { //通过DaoMaster的内部类DevOpenHelper创建数据库 //注意: 默认的DaoMaster.DevOpenHelper会在数据库升级时,删除所有的表 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "student.db", null);//获取数据库 SQLiteDatabase database = helper.getWritableDatabase();//获取数据库 DaoMaster daoMaster = new DaoMaster(database);//获取DaoMaster DaoSession daoSession = daoMaster.newSession();//获取session //拿到对应表的dao对象 dao = daoSession.getInfoDao(); } }
第五步,获取数据库的DAO对象,即可进行增删改查的操作
代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); MyApp application = (MyApp) getApplication(); dao = application.getDao(); } @OnClick({R.id.btn_add, R.id.btn_delete, R.id.btn_update, R.id.btn_query}) public void onClick(View view) { switch (view.getId()) { case R.id.btn_add://增 Info user = new Info(null, "zhangsan", 12, "13112345678"); Info user2 = new Info(null, "lisi", 22, "13222345678"); Info user3 = new Info(null, "wangwu", 32, "13332345678"); Info user4 = new Info(null, "zhaoqi", 42, "13442345678"); dao.insert(user); dao.insert(user2); dao.insert(user3); dao.insert(user4); break; case R.id.btn_delete://删 dao.deleteByKey(1L); break; case R.id.btn_update://改 user4 = new Info(null, "赵四", 42, "13442345678"); dao.update(user4); break; case R.id.btn_query://查 QueryBuilder<Info> infoQueryBuilder = dao.queryBuilder(); QueryBuilder<Info> builder = infoQueryBuilder.where(InfoDao.Properties.Age.eq("32")); List<Info> list = builder.list(); for (Info info: list) { Log.e(TAG, "onClick: "+info.getName()+"--"+info.getAge()+"--"+info.getTel() ); } break; } }