Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android快速開發--使用ORMLite操作數據庫

Android快速開發--使用ORMLite操作數據庫

編輯:關於Android編程

OrmLite是一個數據庫操作輔助的開源框架,主要面向Java語言。在Android面向數據庫開發中,是一個比較流行的開源框架,方便操作而且功能強大,今天來學習一下,最近的項目中也有所涉及,寫個博客來記一下吧,感謝大神團隊貢獻如此實用的開源框架, 

准備工作–創建數據庫及數據表

ORMlite通過Java注解的方式來建立起與數據庫的映射關系,在這裡我們以一個實例來進行說明,如我們現在想要建立一個簡單的數據庫test.db並創建一張表person來記錄一個人的名字,年齡,住址等等。

創建Bean類

首先,建立我們的Bean類Person,並通過注解的方式與數據庫聯系起來

@DatabaseTable(tableName = person)
public class Person {

    @DatabaseField(generatedId=true)
    private int id;
    @DatabaseField(columnName=name)
    private String name;
    @DatabaseField(columnName=age)
    private int age;
    @DatabaseField(columnName=address)
    private String address;
    /**
     * @return the id
     */
    public int getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
    /**
     * @return the address
     */
    public String getAddress() {
        return address;
    }
    /**
     * @param address the address to set
     */
    public void setAddress(String address) {
        this.address = address;
    }

}

在這裡我們創建了Bean類,並與數據庫建立了聯系,有兩件事是我們需要做的
1.需要在@DatabaseTable注解中填入表名
2.在@DatabaseField(columnName=”“)填入字段名,設置字段的屬性等等

字段屬性說明

ORMLite為我們提供了全面的字段屬性的支持,下面我們來具體看一下吧:

cloumnName:指定字段名,不指定則變量名作為字段名 canBeNull:是否可以為null dataType:指定字段的類型 foreign 指定這個字段的對象是一個外鍵,外鍵值是這個對象的id foreignAutoCreate 外鍵不存在時是否自動添加到外間表中 foreignAutoRefresh 外鍵值,自動刷新 foreignColumnName外鍵字段指定的外鍵表中的哪個字段 generatedId:指定字段為自增長的id,不能id,generatedIdSequence通用 id:指定字段為id index:索引 persisted:指定是否持久化此變量,默認true throwIfNull,如果空值拋出異常 useGetSet:指定ormlite訪問變量使用set,get方法默認使用的是反射機制直接訪問變量 unique:字段值唯一 uniqueIndex 唯一索引 uniqueCombo整列的值唯一

創建數據庫

與Android中的數據庫創建相似,使用OrmLite創建數據庫需要我們創建一個SqlOpenHelper繼承OrmLiteSqliteOpenHelper,在OrmLiteSqliteOpenHelper也有兩個重要方法,分別是onCreate和onUpgrade,負責數據庫創建以及升級時的操作

public class MySqlOpenHelper extends OrmLiteSqliteOpenHelper {

    private Dao mPersonDao;

    public MySqlOpenHelper(Context context) {
        super(context, test, null, 1);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
        // TODO Auto-generated method stub
        try {
            //創建數據表
            TableUtils.createTableIfNotExists(arg1, Person.class);
        } catch (java.sql.SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
            int arg3) {
        // TODO Auto-generated method stub

    }

    public Dao getPersonDao() throws java.sql.SQLException {
        if (mPersonDao == null) {
            mPersonDao = getDao(Person.class);
        }
        return mPersonDao;
    }

}

Dao是一個很重要的類, 這些Dao對象用於以後的數據庫操作,其包含兩個泛型,第一個泛型表DAO操作的類,第二個是標記數據表的ID。

數據庫操作

創建了我們自己的數據庫之後就可以來,對數據庫操作了,接下來我們看看如何進行數據庫的增刪查改

插入操作

這些方法使用起來都比較簡單,我們只需將自己的Bean傳入到下列方法中即可

create:插入一條數據 createIfNotExists:如果不存在則插入 createOrUpdate:如果存在則更新

查詢操作

OrmLite為我提供了一系列的查詢操作,方法很多,而且很多都是只看方法名就可以知道的,這裡就不逐一介紹了,在這裡介紹一下如何使用QueryBuilder進行復雜查找。

首先調用personDao.queryBuilder();獲得該Dao下的QueryBuilder對象, 接下來設置QueryBuilder的查詢條件, 最後通過QueryBuilder的query方法獲得List對象,

下面介紹幾個常用的builder下的查詢,
1.多字段條件查詢:

QueryBuilder builder = dao.queryBuilder(); 
builder.where().eq(字段名1,條件1).and.eq(字段名2,條件2); 
builder.query(); 

2.查詢並按順序輸出

QueryBuilder builder = dao.queryBuilder();
builder.orderBy(字段名, true);
builder.query();

orderBy的方法第一參數表示按那個字段進行排序,第二個參數表示是否為升序。

3.分頁查詢

QueryBuilder builder = dao.queryBuilder();
builder.offset(10);//表示查詢的起始位置
builder.limit(10);//表示總共獲取的對象數量
builder.query();

刪除和更改操作

與查詢操作類似,ORMLite同樣為我們提供了一系列的方法,同時也提供了復雜刪除,復雜更改的DeleteBuilder和UpdateBuilder,其用法與QueryBuilder相似,就不詳細介紹了。

將數據庫放置在SD卡

Android創建數據庫默認的存儲路徑是在/data/data/packagename/database 目錄之下,一方面如果數據庫龐大將占用系統存儲空間,另一方面如果沒有獲得系統ROOT權限,將不能直觀的看到該數據庫。所以在最後介紹一下如何將數據庫建立在指定的SD卡目錄之下。

這個在ORMLite中並沒有提供,自己來動手寫一寫吧。閱讀一下Android的源碼可以很容易發現,Android數據庫存放的目錄是由ContextWrapper類下的public File getDatabasePath(String name)方法決定的,那麼我們只需創建自己的Context覆蓋該方法即可。

public class DatabaseContext extends ContextWrapper {

    private static final String ROOT_SDCARD = Environment
            .getExternalStorageDirectory().getAbsolutePath();
    private String dbDir;

    public DatabaseContext(Context base, String path) {
        super(base);
        dbDir = path;
    }

    @Override
    public File getDatabasePath(String name) {
        // 判斷是否存在sd卡
        boolean sdExist = android.os.Environment.MEDIA_MOUNTED
                .equals(android.os.Environment.getExternalStorageState());
        if (!sdExist) {// 如果不存在,
            Log.e(Database error, SD卡不存在);
            return null;
        }

        // 判斷目錄是否存在,不存在則創建該目錄
        File dirFile = new File(dbDir);
        if (!dirFile.exists())
            dirFile.mkdirs();

        // 標記數據庫文件是否創建成功
        boolean isFileCreateSuccess = false;
        String dbPath = dbDir + / + name;// 數據庫路徑
        File dbFile = new File(dbPath);
        // 如果數據庫文件不存在則創建該文件
        if (!dbFile.exists()) {
            try {
                isFileCreateSuccess = dbFile.createNewFile();// 創建文件
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } else
            isFileCreateSuccess = true;

        // 返回數據庫文件對象
        if (isFileCreateSuccess)
            return dbFile;
        else
            return null;

    }

    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
            SQLiteDatabase.CursorFactory factory) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
                getDatabasePath(name), null);
        return result;
    }

    /**
     * Android 4.0會調用此方法獲取數據庫。
     * 
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode,
            CursorFactory factory, DatabaseErrorHandler errorHandler) {
        SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
                getDatabasePath(name), null);
        return result;
    }
}

之後我們在創建SQLOpenHelper時,只需傳入我們自己的DatabaseContext 即可,如

SdCardDBHelper dbHelper = new SdCardDBHelper(new DatabaseContext(
                MainActivity.this, path), person.db);

 

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