您的位置:首页 > 编程语言 > Java开发

GreenDAO之「02.Eclipse环境下的基本操作」

2017-03-29 10:37 162 查看
对代码不满足,是任何真正有天才的程序员的根本特征 (来自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.0freemarker文件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个ButtonEditText 就是需要用户输入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型返回值,用于打印数据有没有被添加上

然后我们把输入框清空

好,这样初始化数据库操作相关类的方法已经封装好

添加数据的方法也封装好了,下面我们对方法进行一个组合:

<
d530
span class="hljs-annotation">@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」

彩蛋!!

看到这里的朋友你有福利了!我的个人微信公众号上线了!众多热门技术文章,众多有趣好玩的脑洞,请扫描下方二维码关注!



程序猿干货分享,欢迎您的到来!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: