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
谢谢!!
afinalDb 用法的更多相关文章
- EditText 基本用法
title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- python enumerate 用法
A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...
- [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...
- 【JavaScript】innerHTML、innerText和outerHTML的用法区别
用法: <div id="test"> <span style="color:red">test1</span> tes ...
- chattr用法
[root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- redis调优的实战经验
本文根据redis的info命令查看redis的内存使用情况以及state状态,来观察redis的运行情况以及需要作出的相应优化. info 1.memory used_memory:13409011 ...
- Heartbeat基础知识-运维小结
在日常的集群系统架构中,一般用到Heartbeat的主要就2种:1)高可用(High Availability)HA集群, 使用Heartbeat实现,也称为”双机热备”, “双机互备”, “双机”: ...
- Nginx报错: "Too many open files accept" 和 "could not build the server_names_hash"
一.访问Nginx时,报错:"accept() failed (24: Too many open files)"原因时:nginx的连接数超过了系统设定的最大值造成的. 处理办法 ...
- 《Linux内核分析》第七周学习总结 可执行程序的装载
第七周.可执行程序的装载 一.可执行程序是如何产生的? (1).c文件gcc汇编形成.s和.asm汇编代码: (2)汇编代码经过gas变成.o目标文件: (3)目标文件变成可执行文件: (4)可执行文 ...
- Linux内核分析:期中总结
第一章:计算机是如何工作的 计算机大部分都是用冯诺依曼体系结构,即存储程序计算机. 两个层面: 1.硬件: cpu(IP寄存器:指针,指向内存的某块区域)——总线——内存(代码与数据) 2.程序员: ...
- 2丶利用NABCD模型进行竞争性需求分析
确定项目:公交查询系统 分析小组:在路上 选择比努力更重要.一个项目成功自然离不开组员们的努力.但是,光努力是不够的.还需要用户有需求,能快速实现. 这些东西,看似很虚,却能让我们少走不少弯路.做项目 ...
- 6-Python3从入门到实战—基础之数据类型(元组-Tuple)
Python从入门到实战系列--目录 元组的定义 定义元组只需要在括号中添加元素,并使用逗号隔开即可 tup = ('Python','Java','C++','Kotlin') 元组与列表的区别 P ...
- BUAA软工个人作业Week3-案例分析
一. 调研评测 评测项目:为了联系移动和PC版,我同时下载了必应词典的Android版本和UWP版本,选择UWP的原因是想看看微软推广的UWP在微软自己的应用上的效果.当然主要是对安卓的测评(UWP用 ...
- realm vs. domain
从wiki的角度:https://wikidiff.com/domain/realm domain是物理的,realm是抽象的,都是领域. domain是一个人或组织拥有或控制的地理区域,而realm ...
- FTP Download File By Some Order List
@Echo Off REM -- Define File Filter, i.e. files with extension .RBSet FindStrArgs=/E /C:".asp&q ...