好吧,說是推薦,其實這是我寫的一個資料庫元件,介紹給大家。這是第一版,希望大家在使用的同時能夠給提出意見,或者提出需求。
解決痛點
這個資料庫的元件解決的痛點主要有以下幾類:
- 建表的時候需要使用sql語句,如果表結構複雜,sql語句容易寫錯。deepsql可以通過三種方式更加簡單的建表。直接傳入model類,或者json或者map,與實際使用場景更加契合。
- 插入資料的時候,可以使用model或json或map直接插入,不需要寫sql語句
- 更新刪除都有封裝,操作更加簡單。
使用方式
只需要依賴
compile 'com.deep:deepsqllib:1.1'
複製程式碼
即可。 下面介紹一下使用方式:
初始化
DeepSQL.getInstance().init(getApplication(),"demo.db",1);
複製程式碼
第一個引數是Application 第二個引數為資料庫名字 第三個引數為版本號。
建表
使用類建表
我們經常會將資料庫內的資料轉成一個modal型別,如果可以使用這個類來建表,豈不是很方便。 例如,我們有一個類:
public class Person implements Serializable{
private String name;
private int age;
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;
}
}
複製程式碼
那麼根據這個類建表可以使用:
DeepSQL.getInstance().create(Person.class);
複製程式碼
其中表名會使用類名
map建表
也有時我們需要根據一個map建表:
HashMap<String,Object> map = new HashMap<String, Object>();
map.put("name","dog");
map.put("age",16);
DeepSQL.getInstance().create("animal",map);
複製程式碼
其中第一個引數為表名
檔案建表
如果以上方式都不需要,也可以使用asset中json建表的方式: 在assets資料夾中放一個json檔案
{
"name1":"String",
"name2":"int",
"name3":"boolean",
"name4":"float",
"name5":"double",
"name6":"long"
}
複製程式碼
然後呼叫:
DeepSQL.getInstance().create(MainActivity.this, "names.json");
複製程式碼
表的名為會以json的檔名命名
json建表
如果不習慣使用assets中的這種json建表方式,也可以直接使用json:
DeepSQL.getInstance().create(MainActivity.this, json);
複製程式碼
插入
json插入
DeepSQL.getInstance().insert("person",jsonObject);
複製程式碼
- 第一個引數為表名
- 第二個引數為插入的json
map 插入
DeepSQL.getInstance().insert("animal",map);
複製程式碼
- 第一個引數為表名
- 第二個引數為插入的map
例項化插入
Person person = new Person();
person.setName("john");
person.setAge(age);
DeepSQL.getInstance().insert(person);
複製程式碼
資料庫查詢
查詢所有
ArrayList<Object> list = DeepSQL.getInstance().selectObjects(Person.class,"person");
複製程式碼
- 第一個引數為類
- 第二個引數為表名
根據條件返回Json
JSONArray array = DeepSQL.getInstance().selectJsonArryBySQL("select * from person where id = 5");
複製程式碼
根據條件返回Object
ArrayList<Object> list = DeepSQL.getInstance().selectObjectsBySQL(Person.class,"select * from person where id = 5");
複製程式碼
更新
json更新
DeepSQL.getInstance().update("person","id=?",new String[]{"5"},jsonObject);
複製程式碼
object更新
DeepSQL.getInstance().update("person","id=?",new String[]{"5"},person);
複製程式碼
刪除
DeepSQL.getInstance().del("person","id=?",new String[]{"6"});
複製程式碼
刪除表
DeepSQL.getInstance().dropTable("person");
複製程式碼
直接執行sql語句
非查詢
DeepSQL.getInstance().exec("sql");
複製程式碼
- 引數為SQL語句
查詢
Cursor c =DeepSQL.getInstance().queryBySQL("sql");
複製程式碼
- 引數為SQL語句
資料庫升級或降級處理
DeepSQL.getInstance().sqlInterface = new SqlInterface() {
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
Logger.single(C.E,"onUpgrade myself");
}
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Logger.single(C.E,"onUpgrade myself");
}
};
複製程式碼
請注意該方法需要在init之前呼叫。
特別說明
第一次寫開源庫,能力有限,歡迎大家多多提出意見。 也歡迎關注我的公眾號,之後會推薦更多好用的元件庫。