afinalDb 用法

  研究Afinal是为了弄懂它到底是怎么实现的,它怎么就能够实现了呢?不过,现在先要看一下怎么用,再从表面推导内在。

       本文就Afinal中建表、添加、删除、查找等常见数据库操作加以说明、探索。

         一、创建数据库

        

         可以看到,有多个create的方法。可以通过参数指定要创建的数据的名称,存储位置,debug模式,数据库版本号,数据库更新监听回调函数等。关于后面的版本号、存储位置、以及更新监听,本文并没有进行实际的测试。需要注意的是,如果没有指定数据库名称,则Afinal会自动创建一个名为afinal.db的数据库文件。除此之外,FinalDb是一个单例对象,即不管使用哪个create对象都会得到单一的FinalDb对象,不会重复创建。

          二、建表及数据插入

        Afinal是支持ORM的,即可以直接使用实体Bean来创建数据表,而不需要自己再编写SQL语句。具体是通过save方法实现的,如下:

          

           查看save方法源码,可以得知,在进行数据插入之前会进行表的存在性判断,如果不存在则会先创建表后,再行插入数据。

          

          这里也需要注意:默认创建的数据表名格式为:PackageName_db_BeanName,如上面注释语句中的com_wly_afinal_db_User。

          如果希望自定义数据表的名称,可以在Bean中通过注释里实现,如:@Table(name="User")

          三、删除

          删除的数据操作有一些列的detele方法实现。

1
2
3
4
5
6
7
//拿到FinalDb对象引用
   FinalDb db = FinalDb.create(MainDBActivity.this, "user.db");
                 
// db.delete(user); //根据对象主键进行删除               
// db.deleteById(user, 1); //根据主键删除数据
// db.deleteByWhere(User.class, "name=AoTuMan"); //自定义where条件删除
   db.deleteAll(User.class); //删除Bean对应的数据表中的所有数据

          四、查找数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String searchKey = searchKeyET.getText().toString();
                 
   //拿到FinalDb对象引用
   FinalDb db = FinalDb.create(MainDBActivity.this, "user.db");
                 
// 注意这里的"where"语句参数是没有where关键字的
   List<User> resultList = db.findAllByWhere(User.class, " name=\"" + searchKey + "\"");
// List<User> resultList = db.findAll(User.class); //查找指定Bean的所有数据记录
   StringBuilder _sb = new StringBuilder();
   for(int i=0;i<resultList.size();i++) {
   _sb.append("id:" + resultList.get(i).getId()
    + " name:" + resultList.get(i).getName()
    + " age:" + resultList.get(i).getAge());
   }
   searchResultTV.setText(_sb.toString());

       这里需要注意什么呢?是的,大多数反射操作时,都需要对应的Bean对象包含一个默认的空构造函数,这里也一样。要查找的Bean必须包含一个空的默认构造函数,以便通过反射创建对象。

       我写了一个简单的Demo,效果如下:

       

        最后有几点总结:

        1、指定表名的注释,在类前加@Table(name="tableName")

        2、指定主键的注释,在字段前加@Id

        3、想要忽略某个属性,在字段前加@Transient

        4、如果类中有自定义的构造函数,则必须实现默认构造函数,否则在读取数据会报错

         O啦~~~

       工程地址:http://download.csdn.net/detail/u011638883/6456385

       转载请保留出处:http://blog.csdn.net/u011638883/article/details/13093001
       谢谢!!

 

posted @   Bigben  阅读(963)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2013-11-28 HTMLUnit web测试
点击右上角即可分享
微信分享提示