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


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

}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值