android 數據庫框架:DBExecutor
DBExecutor主要的功能
-
使用了讀寫鎖,支持多線程操作數據。
-
支持事務
-
支持ORM
-
緩存Sql,緩存表結構
這個類庫主要用于android 數據庫操作。 始終圍繞著一個類對應一個表的概念。 只要創建一個實體類,就不用當心它怎么存儲在數據庫中,不用重新寫增刪改查的代碼。基本的功能已經幫你實現好了。 增刪改查數據只要一句搞定
boolean isSuccess = db.insert(person); boolean isSuccess = db.updateById(person); boolean isSuccess = db.deleteById(Person.class,1); List<Person> persons = db.findAll(Person.class);
-
---library_DB02 是項目的源碼。
-
---DBLibrary_TestCase 是項目的測試用例,主要介紹該類庫詳細的用法
-
---doc 是網頁文檔
-
---db.jar 是該類庫的jar包
-
---doc.chm 是該類庫的chm文檔
-
---設計框架.docx 是該類庫的uml圖生成的圖片
-
---設計框架.mdl 是該類庫的uml圖,描述整個類庫的架構
如果有什么建議可以發我郵箱 告知。794629068@qq.com
最后非常感謝XUtils代碼的作者wyouflf。 該代碼是對開源項目XUtils的數據庫模塊進行重構,及性能優化。 因為他的框架設計的非常合理。很多都是在其基礎上完善的。
1.定義一個簡單對應表的實體類
@Table(name = "Person") public class Person { @Id(autoIncrement = true) private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
必須包含@Id,@Id聲明的字段對應表里的id。autoIncrement = true 自增長。 @Table 聲明表的名字。@Table可以不需要。如果沒有@Table以包名+類名為表的名字
支持基本類型以及基本類型的封裝類,java.sql.Date 定義的字段。如果要支持其他類型的字段請查看DBLibrary_TestCase中的TestColumnConverter.java
2.主要類
1.DBExecutor主要用于執行sql語句,一個數據庫對應一個DBExecutor
獲取默認數據庫的執行者 DBExecutor executor = DBExecutor.getInstance(context); 獲取指定的數據庫的執行者 DBExecutor.getInstance(dbHelper)
主要的方法用 db.execute(sqls),db.executeQuery(sql)等 封裝了簡基本的增刪改查操作,使用db.insert(person);可以保存一條記錄。 執行sql的時候。不用考慮表是否創建。如果表不存在,會自動創建。
2.Sql用于DBExecutor 執行的Sql
與sql文本語句是有差別的。 區別在于Sql 里包含
sql.getTable();//操作的表
sql.getSqlText();//可以帶有?占位符的sql語句
sql.getBindValues();//?占位符對應的值。
sql.setCheckTableExit(checkTableExit);//設置執行sql時檢查表是否存在,默認為true如果 檢查到表不存在自動創建,設置為false 不做檢查 不要害怕復雜,我們可以通過SqlFactory 創建它Sql
3.SqlFactory主要用于創建Sql語句,可以創建復雜增刪改查的sql語句。
// 查詢語句 Sql sql = SqlFactory.find(Person.class); sql = SqlFactory.find(Person.class).where("name", "=", "試著飛"); sql = SqlFactory.find(Person.class).where("age", "=", "10").or("age", "=", 11); sql = SqlFactory.find(Person.class).where("age", "=", "10").orderBy("name", false); sql = SqlFactory.find(Person.class).where("age", "=", "10").orderBy("name", false).limit(1); sql = SqlFactory.find(Person.class).where("name", "like", "%飛"); sql = SqlFactory.find(Person.class).where("name", "like", "_著_"); sql = SqlFactory.find(Person.class).where("age", "in", new int[] { 10, 11, 12 }); sql = SqlFactory.find(Person.class).where("name", "in", new String[] { "小明", "小紅" }); sql = SqlFactory.find(Person.class, "name", "age").where("name", "=", "試著飛"); sql = SqlFactory.find(Person.class, "count(*) as num").where("age", "=", "11"); sql = SqlFactory.find(Person.class, "max(age) as maxAge", "min(age) as minAge").where("sex", "=", "男"); sql = SqlFactory.find(Person.class, new MaxFunction("age", "maxAge"), new MinFunction("age", "minAge")).where("sex", "=", "男"); sql = SqlFactory.find(Person.class).where("name=? and age=?", new Object[] { "小明", 11 }); // 刪除語句 sql = SqlFactory.deleteAll(Person.class); sql = SqlFactory.delete(Person.class).where("age", "=", 11); sql = SqlFactory.deleteById(Person.class, 11); sql = SqlFactory.deleteById(Person.class, new int[] { 11, 12 }); // 更新語句 sql = SqlFactory.update(Person.class, new String[] { "name", "age" }, new Object[] { "小明", "11" }).where("id", "=", 1); sql = SqlFactory.updateById(new Person(1, "小明", 11, "男")); sql = SqlFactory.updateById(new Person(1, "小明", 11, "男"), "name"); // 如果存在 id為1的記錄,就更新,否則 插入一條新記錄 sql = SqlFactory.updateOrInsertById(new Person(1, "小明", 11, "男")); // 插入語句 sql = SqlFactory.insert(new Person(1, "小明", 11, "男")); // 自拼接sql語句 sql = SqlFactory.makeSql(Person.class, "select * from Person where age = ?", new Object[] { 11 });
更多詳細信息請查看項目文檔里面的內容