GreenDao 是第三方数据库插件,里面封装了各种对数据库操作的方法,大大提高了开发人员对sqlite数据库操作的效率。接下来详细介绍GreenDao 的使用方法。
思路:
Ecplise
生成资源文件到指定路径1:ecplise中使用GreenDao生成资源文件
说明:
生成的资源文件有如下:一个表对应四个资源文件,两个表对应六个资源文件…(当然这是笼统的说法),准确的说有固定的DaoMaster.java
,DaoSession.java
,其余的是各个表的属性类和针对该表的数据操作类(如一个user
表对应一个UserDao.java
)
DaoMaster.java
中继承了SQLiteOpenHelper
并实现了onCreate()
和 onUpgrade()
方法,其实原理跟直接使用SQLiteOpenHelper
创建自己的数据库类是一样的。
DaoSession.java
该类是返回针对表的数据操作类,例如对user
表操作的UserDao
类。
用ecplise生成资源文件可能是因为比较方便。
1 导入:
打开 ecplise
新建项目,项目下新建lib
文件夹,将GreenDao.jar
复制到lib
中,并添加依赖:(对项目右键—properties—Add JARs… 找到项目下的lib
下的GreenDao.jar
一路确定就可以了)
2 创建资源文件:
在 ecplise
新建项目中新建主类MainTest ,并实现以下方法:
import java.io.IOException;
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
public class MainTest {
public static void main(String[] args) {
//两个参数,第一个是版本号,第二个是Androidstudio的包名 + 资源文件要放置的文件夹名(文件夹名可自定义,但是这里的文件名要和Androidstudio下的文件名一致)
Schema schema = new Schema(1, "com.inext.test.greendao.dao");
//创建表,多个表就实现多个方法
addUser(schema);
try {
//生成资源到指定路径(可自定义),并捕捉异常
new DaoGenerator().generateAll(schema, "F:\\date\\src");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//该方法生成指定的表,如果需要多个表,那就多实现几个addXxx方法
public static void addUser(Schema schema) {
//创建用户类User
Entity entity = schema.addEntity("User");
//创建表
entity.setTableName("user");
//创建id,并设置主键和自增
entity.addIdProperty().primaryKey().autoincrement();
//以下是表中的各个字段
entity.addStringProperty("name");
entity.addStringProperty("pwd");
entity.addStringProperty("age");
entity.addStringProperty("imgUrl");
}
}
然后在ecplise中运行该java项目,控制台会提示一些完成的提示,例如:
greenDAO Generator
Copyright 2011-2015 Markus Junginger, greenrobot.de. Licensed under GPL V3.
This program comes with ABSOLUTELY NO WARRANTY
Processing schema version 1...
Written F:\date\src\com\inext\test\greendao\dao\UserDao.java
Written F:\date\src\com\inext\test\greendao\dao\User.java
Written F:\date\src\com\inext\test\greendao\dao\DaoMaster.java
Written F:\date\src\com\inext\test\greendao\dao\DaoSession.java
Processed 1 entities in 199ms
说明资源文件生成成功,现在就可以去指定文件夹找到资源文件。
2:Androidstudio中使用生成的资源文件
1:首先导入jar包,并添加依赖,不再多说。
2:将生成的所有资源文件拷贝到指定的文件夹中。
3:新建类继承Applicaion
,并实现相关方法,其中方法是固定的格式
public class MyApp extends Application{
private DaoMaster daoMaster;
private DaoSession daoSession;
private static MyApp instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static MyApp getApp(){
return instance;
}
public DaoMaster getDaoMaster(Context context){
if (daoMaster == null){
DaoMaster.OpenHelper helper =
new DaoMaster.DevOpenHelper(context,"MyDbTest.db",null);
daoMaster = new DaoMaster(helper.getWritableDatabase());
}
return daoMaster;
}
public DaoSession getDaoSession(Context context){
if (daoSession == null){
if (daoMaster == null){
daoMaster = getDaoMaster(context);
}
daoSession = daoMaster.newSession();
}
return daoSession;
}
}
4:配置清单文件AndroidManifest.xml
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" //重新指定application位置,即刚刚创建的MyApp android:name=".application.MyApp" android:label="@string/app_name" android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
至此,数据库什么的都搭建好了,现在就可以对数据库进行自己想要的操作了
5:小例子:往表user中插入一条数据
public class MainActivity extends AppCompatActivity {
private UserDao userDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取UserDao ,可调用里面已经封装好的方法对数据库进行操作
userDao = MyApp.getApp().getDaoSession(this).getUserDao();
//实例一个user对象
User user = new User();
user.setName("xioasheng");
user.setPwd("admin");
user.setAge("20");
user.setImgUrl("地址");
//调用封装好的insert方法
userDao.insert(user);
//通过封装好的loadAll方法获取表中的所有数据
List list = userDao.loadAll();
//测试是否得到了数据
Toast.makeText(this,""+list.size(),Toast.LENGTH_SHORT).show();
}
}
运行结果是,打出了一个 1 。说明插入数据成功。