对代码不满足,是任何真正有天才的程序员的根本特征 (来自csdn首页)
1.自动生成代码
我们通过查看GreenDAO的官方网站以及它在GitHub上的代码呢,发现在使用GreenDAO时,需要在java环境下自动生成一下GreenDAO的相关代码,然后再copy到安卓中来使用。
下面我们从eclipse环境下来看一下GreenDAO如何自动生成代码:
第一步:下载相关jar包
虽然我们可以从GreenDAO官网上找到其使用的相关jar包,这里为了节约大家时间,我把jar包上传到了CSDN资源里,点击下载链接 即可免费下载。解压下载的压缩包,可以看到一下三个jar包:
到此,第一步结束。
第二步:新建java项目导入jar包
我们用eclipse新建一个java项目(注意是java项目),取名greendaogenerate
,然后在项目根目录下创建一个lib文件夹,形如下图:
然后我们将解压得到的greendao-generator-2.0.0和freemarker文件copy到lib文件夹。然后在项目上右击——>Properties——>Java Build Path——>Libraries——>Add Jars…——>打开新建的项目的lib文件夹——>选中两个jar包点击OK
这样我们的jar包就可以使用了。
然后我们在src文件夹下新建一个名为greendaogenerate的class文件,并添加main函数。然后在main函数里添加以下代码:
Schema schema = new Schema(1, "www.yhbAndroid.win");
Entity note = schema.addEntity("Person");
note.addIdProperty();
note.addStringProperty("name").notNull();
note.addIntProperty("age");
note.addStringProperty("sex");
note.addDateProperty("date");
try {
new DaoGenerator().generateAll(schema, "../GreenDaoGenerate/src");
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
如果代码有错误的话,按Ctrl+Shift+O导入一下包。
其实以上代码都是这个greendao官网要求我们这样做的。
其中,Schema对象的第一个参数是一个版本号,第二个参数是让我们规定自定生成的代码需要放置的包名。
然后我们用Entity创建了一个Person的类,然后为Person类添加了一些id、name等的一些属性。
然后我们new了一个DaoGenerator,其实他就是让我们规定一个自动生成的代码所要放置的地方,这里的“../GreenDaoGenerate/src”就是我们要将自动生成的代码放到src根目录下。
最后,我们try……catch了一下。
好,然后我们运行代码,我们可以看到控制台输出了下图中的字样:
这样就表示我们的代码自动生成成功了。
然后我们需要Refresh一下项目,就可以看到如下图所示的自动生成的代码了:
我们可以看到有好多报错,这是因为我们创建的是java项目,缺少android中的api,这里我们先不用管它。
好了,这样我们的代码就自动生成完成了,下面我们将它导入到android项目中!
第三步:新建Android 项目导入jar包和代码
我们新建一个名为greendaoDemo
的Android项目,然后我们将解压得到的greendao-2.0.0
文件copy到libs文件夹下。
然后我们将第三步生成的4个java文件copy到MainActivity所在的文件夹下,形如下图:
这时我们发现好多错误啊,不过不用着急,我们只需要打开有错误的文件,将报错的代码直接删除并保存就可以了!
到此,自动生成的代码就可以使用了!
2.GreenDAO 基本操作
其实以上操作只是一个准备工作,下面我们一起学习一下使用GreenDAO是如何对数据库中的数据进行经典的增、删、改、查操作的!
第一步:准备相关布局和绑定监听事件
我们在学习数据库基本操作的时候,无非就是对数据的增、删、改、查
我们学习使用GreenDAO操作数据库也不例外
我们知道,我们在自动生成代码的时候有一个Person类,其实这就是我们的数据库要储存的信息,一个Person的姓名等的信息
好,下面我们在activity_main 中创建3个EditText 和4个Button,EditText 就是需要用户输入ID、姓名和年龄,4个Button 就对应了增删改查四个操作,我们分别绑定监听事件,下面我们看一下activity_main 中的代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<EditText
android:id="@+id/id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入学号" >
</EditText>
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入姓名" >
</EditText>
<EditText
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入年龄" >
</EditText>
<Button
android:id="@+id/addBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加" />
<Button
android:id="@+id/queryBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询" />
<Button
android:id="@+id/updateBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="修改" />
<Button
android:id="@+id/deleteBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除" />
</LinearLayout>
下面我们在java代码绑定控件,并为其绑定监听事件,由于这一步操作比较简单,直接上代码:
public class MainActivity extends Activity implements OnClickListener {
private EditText mId, mName, mAge;
private Button mAdd, mQuery, mUpdate, mDelete;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();// 初始化控件
}
private void init() {
mId = (EditText) findViewById(R.id.id);
mName = (EditText) findViewById(R.id.name);
mAge = (EditText) findViewById(R.id.age);
mAdd = (Button) findViewById(R.id.addBtn);
mQuery = (Button) findViewById(R.id.queryBtn);
mUpdate = (Button) findViewById(R.id.updateBtn);
mDelete = (Button) findViewById(R.id.deleteBtn);
mAdd.setOnClickListener(this);
mQuery.setOnClickListener(this);
mUpdate.setOnClickListener(this);
mDelete.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.addBtn:
break;
case R.id.queryBtn:
break;
case R.id.updateBtn:
break;
case R.id.deleteBtn:
break;
default:
break;
}
}
}
到此,第一步结束。
第二步:数据库基本操作:增!
其实,使用GreenDAO操作是非常套路的,非常套模式的
首先我们先声明一下以下我们需要使用到的4个大类:
private DevOpenHelper helper;
private DaoMaster master;
private DaoSession session;
private PersonDao dao;
以上四个类呢是我们每次使用GreenDAO都需要使用到的,其实重要的是他们的实例化的方法,我们先看一下这四个大类实例化的代码:
private void openDb() {
helper = new DaoMaster.DevOpenHelper(MainActivity.this, "person.db",null);
master = new DaoMaster(helper.getWritableDatabase());
session = master.newSession();
dao = session.getPersonDao();
}
因为我们每次对数据操作都要使用这四个类。所以 为直接能够调用,我们把实例化他们的代码封装到了openDb()方法中。
好了,下面我们就真正的要增加数据了,其实方法很简单,我们先看代码:
private void addData() {
Person person = new Person(Long.valueOf(mId.getText().toString()),
mName.getText().toString(), Integer.valueOf(mAge.getText()
.toString()), null, new Date());
Long msg = dao.insert(person);
mId.setText("");
mName.setText("");
mAge.setText("");
Log.i("MAIN_TAG", "添加成功 personID : " + msg);
}
看到以上代码,我们把它封装成了addData()方法
首先,我们创建了一个Person对象,我们将它的信息设置为了用户输入的ID、姓名和年龄,性别我们先设为空,创建日期我们使用了Date()类
然后我们执行dao.insert()方法将我们新建的Person对象就添加到数据库了,然后我们拿到了他的一个Long型返回值,用于打印数据有没有被添加上
然后我们把输入框清空
好,这样初始化数据库操作相关类的方法已经封装好
添加数据的方法也封装好了,下面我们对方法进行一个组合:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
openDb();// 实例化相关类
init();// 初始化控件
}
case R.id.addBtn:
addData();// 添加数据
break;
好,在我们运行程序之前,我们先为logcat设置一个输出的标签:
好了,我们运行程序,添加三条数据,我们可以看到MAIN_TAG标签下有如下信息:
这就说明,我们的数据已经添加成功!还挺简单的吧
好了,这样我们的增加操作就完成了!
第三步:数据库基本操作:查!
为了打印我们查询到的数据,我们需要为Person类添加toString()方法
我们在Person.java里,添加如下方法:
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age+ ", sex=" + sex + ", date=" + date + "]";
}
然后我们封装一个queryData()方法,先看代码:
private void queryData() {
list = dao.queryBuilder().list();
Log.i("MAIN_TAG", "查询结果:" + list);
}
其中list类的声明我们拿了出来以便使用:private List<Person> list
其实关键代码只是dao.queryBuilder()
我们将方法返回值赋给了一个list对象,以便打印,
然后我们将方法添加到查询Button的监听事件里:
case R.id.queryBtn:
queryData();// 查询数据(全部)
break;
好,我们运行,点击查询,就看到控制台打印了刚才增加的数据了:
好,查询操作就此告一段落,具体的查询还有好多种情况,下一篇博客我们再慢慢学习!
第四步:数据库基本操作:改!
首先,我们封装了一个带Person对象参数的方法:
private void updateDate(Person person) {
dao.insertOrReplace(person);
}
其实只是一行代码,下面我们把他添加到修改Button的监听事件里:
case R.id.updateBtn:
list = dao.queryBuilder().list();
Person person = list.get(0);
person.setName("小白");
person.setAge(0);
updateDate(person);
break;
这里我们先实例化了list,然后我们将list中第1个数据的名字修改为“小白”,年龄修改为“0”,然后执行我们封装的updateDate()方法。
好,我们运行,先点击修改,再点击查询,我们看到logcat打印以下信息:
我们可以看到ID为201701的信息,名字变成了“小白”,年龄变成了“0”。
好,修改数据,完成!
第五步:数据库基本操作:删!
首先,我们封装了一个delete()方法,代码如下:
private void deleteData() {
list = dao.queryBuilder().list();
for (Person person : list) {
dao.delete(person);
}
}
我们可以看到,我们先实例化了list,然后遍历list中的所有数据,执行dao.delete()方法,这样就把数据库里的数据删除了!
我们运行,先点击删除,再点击查询,我们可以看到logcat打印了以下信息:
我们可以看到,数据库中的信息已经空了!这样,删除操作就完成了!
到此,我们在eclipse环境下,对数据库的操作就学习完成了!相关代码,点击下载链接即可免费下载
接下来的文章,我们将一起学习一下GreenDAO在AndroidStudio环境下的基本操作,一起期待吧!
往期回顾:
Android数据库框架GreenDAO之「01.初始GreenDAO」
彩蛋!!
看到这里的朋友你有福利了!我的个人微信公众号上线了!众多热门技术文章,众多有趣好玩的脑洞,请扫描下方二维码关注!
程序猿干货分享,欢迎您的到来!