个人写的一个android开发库。轻型,快速,全面。欢迎fork和star fastlib库
FastDatabase是封装sqlite数据库以对象为基础调用。所以需要写好实体类
一个最基本的实体类,id被注解为主键并且自动增长
public class Person{ @Database(keyPrimary = true,autoincrement = true) //主键且自动增长 public int id; public int age; public String sex; public String name; }
接下来的动作都是根据有主键的实体类来做的
存和改:只需要一行代码来保存或更新这个Bean
private void savePerson(){ Person person=new Person(); //如果为person指定了id且表中存在此id则为修改 person.name="张三"; FastDatabase.getDefaultInstance(this).saveOrUpdate(person); //使用默认数据库存储Person对象 }
查:取出某个对象.在取出来后应判断列表或对象是否为空,因为如果表不存在或者未查询到指定信息的话会返回空对象
private void getPerson(){ List<Person> personList=FastDatabase.getDefaultInstance(this).get(Person.class); //默认取出整张Person表的数据 Person firstPerson=FastDatabase.getDefaultInstance(this).getFirst(Person.class); //取表中第一条数据 }
删除:删除数据库中某个对象,下面的例子是删除表中第一条数据
private void deletePerson(){ Person person=FastDatabase.getDefaultInstance(this).getFirst(Person.class); //取出表中第一条数据 FastDatabase.getDefaultInstance(this).delete(person); //删除这条数据 }
高级功能
条件过滤
对于没有主键或者一些更灵活性的动作我们可以使用过滤条件来处理.比如我们想删除人员信息中女性的数据,可以这样写
FastDatabase.getDefaultInstance(this) //获取默认数据库 .setFilter(And.condition(Condition.equal("sex","女"))) //指定过滤条件为sex字段为'女'(也就是女性人员) .delete(Person.class); //目标是Person数据表Condition有6种:biger(比指定的值更大),smaller(比指定的值更小),emptyValue(是null的),notEmptyValue(不是null的),equal(和指定的值相等),unequal(指定值之外的数据)
取出年龄小于20的人员
List<Person> list=FastDatabase.getDefaultInstance(this) //获取默认数据库 .setFilter(And.condition(Condition.smaller("age","20"))) //过滤条件为age小于20(年龄小于20的人员) .get(Person.class); //目标是Person数据表
数据库切换
在获取的时候指定数据库
FastDatabase.getInstance(this,"databaseName");获取到数据库后临时切换到指定数据库
FastDatabase.getDefaultInstance(this).toWhichDatabase("databaseName");
自动更新
在讲解使用之前需要一点基础知识:
android中sqlite数据库的功能是不完全的.不支持修改列名,删除列,修改列类型或者属性也是不支持的,有一些命令也是无效的,比如begin transaction。只能靠SQLiteDatabase.exeSql(command)逐行输入。
当做了上列不支持的行为后如果你想保存某些数据到下一个版本中需要改表名,导数据从旧表到新表(可能需要丢弃一些不需要的数据掉)等等,具体请自行查询
延续之前使用的Person类。我们添加一个address的字段,如果你没有更新数据库版本,那么这个字段是不可用的,存储的时候将会异常
这时你需要更新数据库版本。升级也只需要更新版本号,在使用这张表时会自动更新
FastDatabase.getConfig().setVersion(2);一般情况下这行代码是放在application的onCreate中,这里我偷个懒直接放MainActivity中
修改代码中的onCreate方法和updatePerson()方法
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout); FastDatabase.getConfig().setVersion(2); init(); }
private Person updatePerson(){ Person person=new Person(); person.id=0; person.name=mInputName.getText().toString(); person.address="贝克街23号"; String idStr=mInputId.getText().toString(); if(!TextUtils.isEmpty(idStr)) person.id=Integer.parseInt(idStr); return person; }
随便存储一条信息,log
09-22 17:00:14.590 13618-13618/com.myapplication D/FastDatabase: 发现数据库版本需要升级,开始自动升级
09-22 17:00:14.610 13618-13618/com.myapplication D/FastDatabase: 表com.myapplication.Person增加1列
09-22 17:00:14.610 13618-13618/com.myapplication D/FastDatabase: 数据库升级完毕
09-22 17:00:14.640 13618-13618/com.myapplication D/FastDatabase: default.db<----com.myapplication.Person
查看所有
09-22 17:02:22.000 15564-15564/com.myapplication I/System.out: id:2 name:李四 address:null
09-22 17:02:22.000 15564-15564/com.myapplication I/System.out: id:3 name:王三麻 address:null
09-22 17:02:22.010 15564-15564/com.myapplication I/System.out: id:4 name:aaa address:贝克街23号
其中李四和王三麻是旧版本中的数据,自然是没有address的
到此告一段落。FastDatabase中还有很多功能和选项,如果有问题请在评论回复我