demo下载地址: http://download.csdn.net/detail/sagemwireless_jsc/9366694
集成步骤:
1:在eclipse中新建一个java工程,这个工程是用来生成代码的
在eclipse中 File ->New ->Java project
然后写上java工程名:
把下载的greendao jar包:greendao-generator-1.3.1.jar 和 freemarker-2.3.20.jar放进 java工程的libs中,新建一个
ScGreenGenerator.java的文件
2. 新建一个android工程:
ScGreenGenerator.java的代码我们一会再说,接下来是新建一个android工程,这个android工程才是真正使用greendao的地方,
建完android工程后,吧jar包 greendao-1.3.7.jar放到android工程的libs目录下,工程目录如下:
3:写ScGreenGenerator.java文件中的代码:
其中需要注意的是 new Schema(1 , "com.songs.greendao"); 中的1是数据库版本号,com.songs.greendao是给工具生成的代码的包名。而"D:/A_demo_code/android_demo/MyGreenDaoDemo/src"这个路径是生成的代码放的路径,这里我把自己的路径放到刚才建的android工程
的src目录下,根据自己需求可以自己修改,代码如下
public class ScGreenGenerator {
public static void main(String[] args) throws Exception {
// 正如你所见的,你创建了一个用于添加实体(Entity)的模式(Schema)对象。
// 两个参数分别代表:数据库版本号与自动生成代码的包路径。
Schema schema = new Schema(1, "com.songc.greendao");
// 当然,如果你愿意,你也可以分别指定生成的 Bean 与 DAO 类所在的目录,只要如下所示:
// Schema schema = new Schema(1, "com.songc.greendao.bean");
// schema.setDefaultJavaPackageDao("com.songc.greendao.dao");
// 模式(Schema)同时也拥有两个默认的 flags,分别用来标示 entity 是否是 activie 以及是否使用 keep sections。
// schema2.enableActiveEntitiesByDefault();
// schema2.enableKeepSectionsByDefault();
// 一旦你拥有了一个 Schema 对象后,你便可以使用它添加实体(Entities)了。
addNote(schema);
addUserInfo(schema);
// 最后我们将使用 DAOGenerator 类的 generateAll() 方法自动生成代码,此处你需要根据自己的情况更改输出目录(既之前创建的目录就发在src下)。
// 其实,输出目录的路径可以在 build.gradle 中设置,有兴趣的朋友可以自行搜索,这里就不再详解。
new DaoGenerator().generateAll(schema, "D:/A_demo_code/android_demo/MyGreenDaoDemo/src");
}
/**
* @param schema
*/
private static void addNote(Schema schema) {
// 一个实体(类)就关联到数据库中的一张表,此处表名为「Note」(既类名)
Entity note = schema.addEntity("Note");
// 你也可以重新给表命名
// note.setTableName("NODE");
// greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值
// 接下来你便可以设置表中的字段:
note.addIdProperty();
note.addStringProperty("text").notNull();
// 与在 Java 中使用驼峰命名法不同,默认数据库中的命名是使用大写和下划线来分割单词的。
note.addStringProperty("comment");
note.addDateProperty("date");
}
private static void addUserInfo(Schema schema){
Entity userinfo = schema.addEntity("UserInfo");
userinfo.addIdProperty();
userinfo.addStringProperty("user_id");
userinfo.addStringProperty("name");
userinfo.addStringProperty("gender");
userinfo.addStringProperty("phone");
userinfo.addStringProperty("extra");
}
}
4: 运行java工程,生成DaoMaster.java ,DaoSession.java Note.java NoteDao.java UserInfo.java UserInfoDao.java 这几个文件
通过日志输出可以看到生成那些文件:
接下来在android工程的src目录下可以看到生成的代码:
MigrationHelper.java和ScOpenHelper.java 不是工具生成的,而是因为需要数据库需要升级维护,我自己加进去的
5. 接下来就是greenDao的使用了,由于我这里只讲怎么在eclipse中怎么集成greenDao,使用的就不在这里详细讲了,具体的使用大家去
下载demo吧 (demo下载地址: http://download.csdn.net/detail/sagemwireless_jsc/9366694) ,demo里面有我以上集成的工程的代码。
这里只把MainActivity中代码提出来看一下是如何使用的:
package com.author_jsc.mygreendao;
import java.util.ArrayList;
import java.util.List;
import com.songc.greendao.UserInfo;
import com.songc.greendao.UserInfoDao;
import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import de.greenrobot.dao.query.Query;
import de.greenrobot.dao.query.QueryBuilder;
public class MainActivity extends Activity implements OnClickListener {
public static final String TAG = "MainActivity";
private EditText mInputEdTv;
private Button mAddBtn;
private Button mQueryBtn;
private ListView mListView;
private MainAdapter mAdapter;
private List mUserInfoList = new ArrayList();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mInputEdTv = (EditText)findViewById(R.id.main_ex_tv);
mAddBtn = (Button) findViewById(R.id.main_add_tv);
mQueryBtn = (Button) findViewById(R.id.main_query_tv);
mListView = (ListView) findViewById(R.id.main_result_listview);
mAddBtn.setOnClickListener(this);
mQueryBtn.setOnClickListener(this);
mAdapter = new MainAdapter(MainActivity.this , mUserInfoList);
mListView.setAdapter(mAdapter);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.main_add_tv:
addUserInfo();
break;
case R.id.main_query_tv:
queryUserInfo();
break;
}
}
private void addUserInfo(){
String userId = mInputEdTv.getText().toString();
mInputEdTv.setText("");
if (userId == null || userId.equals("")) {
ToastUtils.show(getApplicationContext(), "Please enter a note to add");
} else {
// 插入操作,简单到只要你创建一个 Java 对象
UserInfo userInfo = new UserInfo(null , 10000+userId+"", "songcai_"+userId ,"0", "13514969011" ,"official");
getUserInfoDao().insert(userInfo);
Log.d(TAG, "Inserted new note, ID: " + userInfo.getUser_id());
ToastUtils.show(getApplicationContext(), " add data success");
}
}
private void queryUserInfo(){
String noteText = mInputEdTv.getText().toString();
mInputEdTv.setText("");
if (noteText == null || noteText.equals("")) {
ToastUtils.show(getApplicationContext(), "Please enter a user to query");
} else {
// Query 类代表了一个可以被重复执行的查询
Query query = getUserInfoDao().queryBuilder()
.where(UserInfoDao.Properties.User_id.eq(noteText))
.build();
// 查询结果以 List 返回
mUserInfoList = query.list();
mAdapter.getItems().clear();
mAdapter.setItems(mUserInfoList);
ToastUtils.show(getApplicationContext(), "There have " + mUserInfoList.size() + " records");
mAdapter.notifyDataSetChanged();
}
// 在 QueryBuilder 类中内置两个 Flag 用于方便输出执行的 SQL 语句与传递参数的值
QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;
}
private UserInfoDao getUserInfoDao() {
// 通过 BaseApplication 类提供的 getDaoSession() 获取具体 Dao
return ((SGApplication) this.getApplicationContext()).getGreenDaoDbUtil().getDaoSession().getUserInfoDao();
}
private SQLiteDatabase getDataBase() {
// 通过 BaseApplication 类提供的 getDb() 获取具体 db
return ((SGApplication) this.getApplicationContext()).getGreenDaoDbUtil().getDataBase();
}
}