推荐一个好用的数据库SDK—deepsql

作者: mymdeep | 来源:发表于2017-12-16 13:13 被阅读72次

    好吧,说是推荐,其实这是我写的一个数据库组件,介绍给大家。这是第一版,希望大家在使用的同时能够给提出意见,或者提出需求。


    解决痛点

    这个数据库的组件解决的痛点主要有以下几类:

    • 建表的时候需要使用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

        本文链接:https://www.haomeiwen.com/subject/dnldwxtx.html