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

在eclipse环境下集成开源数据库框架greenDao

2015-12-18 13:14 555 查看
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<UserInfo> mUserInfoList = new ArrayList<UserInfo>();

@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()){

4000
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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息