推薦一個好用的資料庫SDK—deepsql

mymdeep發表於2019-01-27

好吧,說是推薦,其實這是我寫的一個資料庫元件,介紹給大家。這是第一版,希望大家在使用的同時能夠給提出意見,或者提出需求。


解決痛點

這個資料庫的元件解決的痛點主要有以下幾類:

  • 建表的時候需要使用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之前呼叫。

特別說明

第一次寫開源庫,能力有限,歡迎大家多多提出意見。 也歡迎關注我的公眾號,之後會推薦更多好用的元件庫。

推薦一個好用的資料庫SDK—deepsql

相關文章