Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> greendao的使用

greendao的使用

編輯:關於Android編程

今天在項目裡使用到了greendao,記錄一下greendao的使用過程。

greendao是對sqlite數據庫操作的封裝,可以讓我們更加方便的使用sqlite,其它類似的框架還有OrmLite、SugarORM、Active Android、Realm。但是greendao的性能要遠遠的高於其它四個框架,在官網有測試結果,因為它不是使用反射的機制,而是直接生成相關的代碼。這就大幅度提升了它的性能。

greendaovcHLyv2+3b/i1tChozwvcD4NCjxoMyBpZD0="使用步驟">使用步驟:

1、配置android工程的build.gradle,引入greendao的相關配置。

green-dao

sourceSets {
        main {
            java.srcDirs = ['src/main/java', 'src/main/java-gen']
        }
    }

compile 'de.greenrobot:greendao:2.1.0'

2、在android工程裡建立一個java-gen文件夾,用來存放greendao生成的一些類

java-gen1

java-gen2

java-gen

3、建立java工程

如果我們要使用greendao需要另建一個純java工程,這個Java工程用來生成我們android工程中需要用到的一些類,包括Bean,DAO,DaoMaster,DaoSession.

1.1 建立工程

green-dao

green-dao2

green-dao3

green-dao4

1.2 配置java工程的build.gradle

java工程的build.gradle裡添加dependencies

green-dao5

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'de.greenrobot:greendao-generator:2.1.0'
}
1.3 配置好之後要重新編譯一下工程,讓android studio去下載對應版本的庫文件

green-dao6

green-dao7

1.4 編寫java工程裡的MyGreenDaoClass類

這個類很關鍵,它裡面會建立數據庫和表以及表的各個字段,代碼如下

public class MyGreenDaoClass {

     public static void main(String[] args) throws Exception {
         //1、   參數: 1表示數據庫版本號  "lhd.test.hello"表示自動生成代碼的路徑
         Schema schema = new Schema(1,"lhd.test.hello");
         //2、   創建了schema後,就可以用這個schema對象操作數據庫了
        //這裡我們寫了個方法
         mydatabase(schema);
         //3、    使用 DAOGenerator 類的 generateAll() 方法自動生成代碼
         //我們將代碼自動生成到我們之前建立的android的java-gen目錄下,這個路徑不是固定的,可以自由設置
         new DaoGenerator().generateAll(schema,"F:\\androidg4\\MyGreenDao\\app\\src\\java-gen");

     }
    private static void mydatabase(Schema schema){
        //1、  創建一個實體類,一個實體類就是數據庫的一張表 這裡表名為mydata,數據庫的名字會在android工程中指定
        Entity mydata = schema.addEntity("MyData");

        //2、  設置實體類的屬性,每個屬性就是表中的一個字段
        mydata.addIdProperty();   //首先設置一個Id
        mydata.addStringProperty("name");  //設置一個name字段
        mydata.addStringProperty("age");   //設置一個age字段
        mydata.addStringProperty("cool").notNull();//設置一個cool字段,並且不能為空
    }
}

注意一點就是:千萬不要倒錯包了
green-dao Schema

import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
1.5 運行java工程生成代碼

運行成功會在java-gen目錄下產生DaoMaster,DaoSession,mydata,mydataDao文件

運行沒有錯誤,控制台輸出
finish

運行後生成的文件
green-dao

4、android工程使用greendao生成的文件

4.1建立自己的application

// 我們將DaoSession對象放在myapplication裡,避免多次生成 Session 對象,這樣全局就使用同一個session鏈接到數據庫啦。
myapplication.java

package com.example.lhd.mygreendao;

import android.app.Application;
import android.database.sqlite.SQLiteDatabase;

import lhd.test.hello.DaoMaster;
import lhd.test.hello.DaoSession;

/**
 * Created by LHD on 2016/6/14.
 */
public class myapplication extends Application{

    //建立全局的daoSession
    public static DaoSession daoSession;
    public static SQLiteDatabase db;
    @Override
    public void onCreate() {
        super.onCreate();
        setupDatabase();
    }
    private void setupDatabase() {
        // 通過 DaoMaster 的內部類 DevOpenHelper,你可以得到一個便利的 SQLiteOpenHelper 對象。
        // 可能你已經注意到了,你並不需要去編寫「CREATE TABLE」這樣的 SQL 語句,因為 greenDAO 已經幫你做了。
        // 注意:默認的 DaoMaster.DevOpenHelper 會在數據庫升級時,刪除所有的表,意味著這將導致數據的丟失。
        // 所以,在正式的項目中,你還應該做一層封裝,來實現數據庫的安全升級。
        //數據庫的名字是my_data
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "my_data", null);
        db = helper.getWritableDatabase();
        // 注意:該數據庫連接屬於 DaoMaster,所以多個 Session 指的是相同的數據庫連接。
        DaoMaster daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }
}

別忘了在manifest文件裡聲明:

    
        android:name=".myapplication"

        android:theme="@style/AppTheme">
        
            
                

                
            
        
    

布局文件:
activity_main.xml




    

        
    

    

    

主代碼文件:
MainActivity.java

package com.example.lhd.mygreendao;

import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

import java.util.List;

import de.greenrobot.dao.query.Query;
import lhd.test.hello.MyData;
import lhd.test.hello.MyDataDao;


public class MainActivity extends ListActivity {

    private SQLiteDatabase db;
    private EditText edit_input;
    private Cursor cursor;

    private String str_input;

    private MyDataDao dataDao;

    //定義一個全局變量i 用來模擬年齡
    private static int i = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit_input = (EditText) findViewById(R.id.edit_input);
        //獲取全局的daoSession然後通過daoSession獲取mydataDao
        dataDao = myapplication.daoSession.getMyDataDao();
        db = myapplication.db;
        //獲取name字段的行
        String textColumn = MyDataDao.Properties.Name.columnName;
        //按本地語言進行排序
        String orderBy = textColumn + " COLLATE LOCALIZED ASC";
        //執行查詢返回一個cursor
        cursor = db.query(dataDao.getTablename(), dataDao.getAllColumns(), null, null, null, null, orderBy);

        //SimpleCursorAdapter的使用
        String[] from = {textColumn, MyDataDao.Properties.Age.columnName};

        int[] to = {android.R.id.text1, android.R.id.text2};

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor, from,
                to);
        setListAdapter(adapter);

    }

    public void onMyClick(View v) {
        switch (v.getId()) {
            case R.id.add:
                add_data();
                break;
            case R.id.search:
                search_data();
                break;
        }
    }

    //添加一條數據
    public void add_data() {
        str_input = edit_input.getText().toString();
        edit_input.setText("");

        //1、創建對象
        MyData data = new MyData();
        String name = str_input;
        String age = "20" + i++;
        String cool = "yes";
        //2、設置數據
        data.setName(name);
        data.setAge(age);
        data.setCool(cool);
        //3、插入數據
        dataDao.insert(data);
        cursor.requery();
    }

    //查詢
    public void search_data() {
        str_input = edit_input.getText().toString();

        if (edit_input.getText().toString().isEmpty()) {
            Toast.makeText(MainActivity.this, "輸入錯誤", Toast.LENGTH_SHORT).show();
        } else {
            Query query = dataDao.queryBuilder()
                    .where(MyDataDao.Properties.Name.eq(str_input))
                    .orderAsc(MyDataDao.Properties.Age)
                    .build();
            List ls = query.list();   //查詢返回的list
            Toast.makeText(MainActivity.this, "有" + ls.size() + "條數據符合", Toast.LENGTH_SHORT).show();
            edit_input.setText("");
        }
    }

    //刪除
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        //刪除操作,通過id刪除
        dataDao.deleteByKey(id);
        cursor.requery();
    }
}

效果圖:
green-dao

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved