研究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
       谢谢!!

afinalDb 用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

随机推荐

  1. mybatis 缓存的使用, 看这篇就够了

    目录 1 一级缓存 1.1 同一个 SqlSession 1.2 不同的 SqlSession 1.3 刷新缓存 1.4 总结 2 二级缓存 2.1 配置二级缓存 2.2 使用二级缓存 2.3 配置详 ...

  2. 利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)

    源码地址 https://github.com/stephen-v/tensorflow_vgg_classify 1. VGG介绍 1.1. VGG模型结构 1.2. VGG19架构 2. 用Ten ...

  3. CSS文本实例

    CSS 文本属性可定义文本的外观. 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等.#############################CSS 文本属性属 ...

  4. eclipse添加maven环境

    一.打开eclipse,选择Window->preference,如下图所示 二.Maven-> installation->add,见下图: 三.选择Directory,选择mav ...

  5. [LeetCode] 307. Range Sum Query - Mutable 解题思路

    Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...

  6. python-知识回顾-16

    知识回顾 小数据池:int -5~256str 特殊字符,*数字20 ascii : 8位 1字节 表示1个字符unicode 32位 4个字节 表示一个字符utf- 8 1个英文 8位,1个字节 欧 ...

  7. 作业20171019 alpha-1成绩

    申诉 对成绩有疑问或不同意见的同学,请在群里[@杨贵福]. 申诉时间截止2017年11月21日 12:00. 总结 普遍成绩有明显上升,归功于1. 团队全都超额完成1次站立会议,多数团队完超额2次; ...

  8. Estimating the number of receiving nodes in 802.11 networks via machine learning

    来源:IEEE International Conference on Communications 作者:Matteo Maria 年份:2016 摘要: 现如今很多移动设备都配有多个无线接口,比如 ...

  9. id生成工具类

    import java.util.Random; /** * 各种id生成策略 * <p>Title: IDUtils</p> * <p>Description: ...

  10. 利用ini_set()函数实现对php配置文件的修改

    PHP的配置文件是php.ini,如果要开启或者关闭扩展,还有设置一些模块的相关配置是,就得对该文件进行修改, 修改的方法也很简单,打开php.ini找到对应项直接修改,修改之后需要重新启动才能生效. ...