原文地址: "一個輕量級的Android資料庫操作工具" 寫了一個輕量級的Android操作資料庫的ORM工具。方便Android定義資料庫,操作資料庫(增刪改查),資料庫更新,實現了Android對象與資料庫對象之間的映射。源碼地址: "輕量級Android操作資料庫ORM工具" 。可以直接gra ...
原文地址:一個輕量級的Android資料庫操作工具
寫了一個輕量級的Android操作資料庫的ORM工具。方便Android定義資料庫,操作資料庫(增刪改查),資料庫更新,實現了Android對象與資料庫對象之間的映射。源碼地址:輕量級Android操作資料庫ORM工具。可以直接gradle依賴~
Android資料庫操作工具使用步驟
- 用Navicat(或其他工具)新建一個SQLite資料庫文件,放在工程res文件下的raw文件夾里;
- 繼承AbstractSQLiteManger創建一個database;
- 為每一個表創建一個Java對象,以實現資料庫表對象與資料庫表對象的一一映射; 為每一個表創建一個Dao類,繼承AbstractDao;
- 抽象類中已經實現了基本的增刪改查功能,只需要傳遞一個表名即可使用所有方法,如果你需要自定義SQL操作,也可以獲得database後自己處理。
Android資料庫操作工具實例
1.新建一個SQLiteHelper(這裡用到的test.db可以直接用工具生成):
public class SQLiteHelper extends AbstractSQLiteManger {
/**
* 構造函數
*
* @param databaseName 保存的資料庫文件名,如test.db
* @param packageName 工程包名,如cn.flyzy2005.fzthelper,在工程的build.gradle文件可以看到
* @param databaseVersion 當前的資料庫版本
* @param databaseRawId 需要寫入的database文件所對應的R.raw的id,如R.id.test(把test.db文件拷貝到res下的raw下麵即可)
* @param context ApplicationContext
*/
public SQLiteHelper(String databaseName, String packageName, int databaseVersion, int databaseRawId, Context context) {
super(databaseName, packageName, databaseVersion, databaseRawId, context);
}
@Override
protected void updateDatabase(int oldVersion, int newVersion) {
if(oldVersion >= newVersion)
return;
//根據資料庫版本依次更新
for(int i = oldVersion; i < newVersion; ++i){
switch (i){
case 0:
//更新操作包括4個步驟
//1.將所有表重命名成temp表 String TEMP_TABLE = "ALTER TABLE \"routeline\" RENAME TO \"_temp_routeline\"";
//2.建立一個新表
//String NEW_TABLE = "CREATE TABLE \"routeline\" (\n" +
//"\"ID\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,\n" +
// "\"userName\" TEXT,\n" +
// "\"RouteLine\" BLOB NOT NULL,\n" +
// "\"beginDate\" TEXT NOT NULL,\n" +
// "\"stopDate\" TEXT NOT NULL,\n" +
// "\"upload\" INTEGER NOT NULL DEFAULT 0\n" +
// ")";
//3.轉移數據 String INSERT_DATA = "INSERT INTO \"routeline\" (\"ID\", \"userName\", \"RouteLine\", \"beginDate\", \"stopDate\") SELECT \"ID\", \"userName\", \"RouteLine\", \"beginDate\", \"stopDate\" FROM \"_temp_routeline\"";
//4.刪除temp表 String DROP_TEMP = "drop table _temp_routeline";
//依次調用getDatabase().execSQL(sql)即可
break;
case 1:
break;
default:
break;
}
}
}
}
2.為每一個表創建一個對象:
public class BaseBook {
@PrimaryKey
private int id;
@Ignore
private String test;
@Ignore
private String test1;
@Ignore
private String test2;
//... get set
}
public class Book extends BaseBook{
@ColumnAlias(columnName = "name")
private String name1;
private String author;
private String publisher;
//... get set
}
提供了註解的方式,表明該屬性是否為主鍵,是否需要參與映射等。
3.為每一個對象創建一個資料庫操作對象:
public class BookDao extends AbstractDao<Book> {
public BookDao() {
setDatabase(BaseApplication.getInstance().getDatabase());
setTableName("book");
}
public void myOpera(){
SQLiteDatabase myDatabase = getDatabase();
//...do anything you want with SQLiteDatabase
}
}
4.此時,你就能使用所有在IBaseDao中實現的方法了:
interface IBaseDao<T> {
/**
* 根據primaryKey進行查詢
* 需要設置{@link cn.flyzy2005.daoutils.anno.PrimaryKey}
*
* @param primaryKey 主鍵的值
* @return entity實例,沒有則為null
*/
T getByPrimaryKey(Object primaryKey);
/**
* 根據條件條件進行查詢
*
* @param condition 查詢條件{"name":"fly"}(封裝在JSONObject中)
* @return 滿足條件的第一個實例,沒有則為null
*/
T getByParams(JSONObject condition);
/**
* 根據條件條件進行查詢
*
* @param condition 查詢條件{"name":"fly"}(封裝在JSONObject中)
* @return 所有滿足條件的entity實例,沒有則為空ArrayList
*/
List<T> listByParams(JSONObject condition);
/**
* 查詢表中所有數據
*
* @return 所有entity實例,沒有則為空ArrayList
*/
List<T> listAll();
/**
* 根據sql語句進行查詢
*
* @param sql sql語句
* @return 滿足條件的第一個實例,沒有則為null
*/
T getBySql(String sql);
/**
* 根據sql語句進行查詢
*
* @param sql sql語句
* @return 滿足查詢條件的entity實例,沒有則為空ArrayList
*/
List<T> listBySql(String sql);
/**
* 添加一條記錄
*
* @param model entity實例
* @param withId 是否需要插入PrimaryKey,不插入的話就採用SQLite自帶的自增策略(不插入需要設置{@link cn.flyzy2005.daoutils.anno.PrimaryKey})
* @return 是否插入成功
*/
boolean insert(T model, boolean withId);
/**
* 根據primaryKey刪除一條記錄
*
* @param model entity實例
* @return 是否刪除成功
*/
boolean delete(T model);
/**
* 根據Id刪除一條記錄
*
* @param primaryKey primaryKey
* @return 是否刪除成功
*/
boolean deleteByPrimaryKey(Object primaryKey);
/**
* 根據條件刪除一條(多條)記錄
*
* @param condition 刪除條件
* @return 是否刪除成功
*/
boolean deleteByParams(JSONObject condition);
/**
* 刪除表中所有數據
*
* @return 是否刪除成功
*/
boolean deleteAll();
/**
* 修改一條記錄,會根據傳入的entity的primaryKey進行匹配修改,並且會用除primaryKey之外的所有其他屬性的新值更新資料庫
*
* @param model 修改的entity實例
* @return 是否修改成功
*/
boolean update(T model);
/**
* 根據條件修改一條記錄,並且會用除primaryKey的所有其他屬性的新值更新資料庫
*
* @param model 修改的entity實例
* @param condition 條件
* @return 是否修改成功
*/
boolean updateByParams(T model, JSONObject condition);
/**
* 所有行數
*
* @return int
*/
int count();
/**
* 滿足條件的所有行數
*
* @param condition 條件
* @return int
*/
int countByParams(JSONObject condition);
}
獲取方法
直接在gradle中配置:
compile 'cn.flyzy2005:daoutils:1.0.1'
總結
一個簡單的Android操作資料庫的輕量級ORM對象~對一些簡單的Android項目還是挺有幫助的,歡迎star,一起學習~