Android快速開發--使用ORMLite操作資料庫,androidormlite

來源:互聯網
上載者:User

Android快速開發--使用ORMLite操作資料庫,androidormlite

OrmLite是一個資料庫操作輔助的開源架構,主要面向Java語言。在Android面向資料庫開發中,是一個比較流行的開源架構,方便操作而且功能強大,今天來學習一下,最近的項目中也有所涉及,寫個部落格來記一下吧,感謝大神團隊貢獻如此實用的開源架構,這裡是OrmLite的官方網址:http://ormlite.com/

準備工作–建立資料庫及資料表

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<Person, Integer> 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<Person, Integer> 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<Person, Integer> builder = dao.queryBuilder();builder.orderBy("欄位名", true);builder.query();

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

3.分頁查詢

QueryBuilder<Person, Integer> 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");
ORMLite相關檔案下載

附上ORMLite相關jar檔案以及官方文檔說明:點擊下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.