好吧,说是推荐,其实这是我写的一个数据库组件,介绍给大家。这是第一版,希望大家在使用的同时能够给提出意见,或者提出需求。
解决痛点
这个数据库的组件解决的痛点主要有以下几类:
- 建表的时候需要使用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之前调用。
特别说明
第一次写开源库,能力有限,欢迎大家多多提出意见。
也欢迎关注我的公众号,之后会推荐更多好用的组件库。
网友评论