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",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- item 3: 理解decltype
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 decltype是一个奇怪的东西.给出一个名字或者一个表达式,de ...
- Jmeter(三十三)_JsonPath表达式提取响应
我们在用jmeter做接口测试的时候,有的时候会遇到一些复杂的json响应.比如多层list嵌套时的取值 一个简单的例子: $..Name:列出所有省份 $..Province[0].Name 提取P ...
- Centos6.9下安装并使用VNC的操作记录
VNC是一个的"远程桌面"工具.,通常用于“图形界面”的方式登录服务器,可视化操作.废话不多说了,操作记录如下: 1)安装桌面环境 [root@vm01 ~]# yum -y gr ...
- 【CV】ICCV2015_Describing Videos by Exploiting Temporal Structure
Describing Videos by Exploiting Temporal Structure Note here: it's a learning note on the topic of v ...
- 第八周--Linux中进程调度与进程切换的过程
[潘恒 原创作品转载请注明出处 <Linux内核分析>MOOC课程 "http://mooc.study.163.com/course/USTC 1000029000 " ...
- MSF MS11-050/10-087/Adobe攻击实践及内存保护技术
MSF MS11-050/10-087/Adobe攻击实践及内存保护技术 内存攻击指的是攻击者利用软件安全漏洞,构造恶意输入导致软件在处理输入数据时出现非预期错误,将输入数据写入内存中的某些特定敏感位 ...
- JUnit4 单元测试
一. 题目简介 这次的单元测试我作了一个基本运算的程序,该程序实现了加,减,乘,除,平方,倒数的运算,该程序进行测试比较的简单,对于初步接触JUnit的我来说测试起来也比较容易理解. 二.源码的git ...
- myBatis插件(plugins)
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用.默认情况下,MyBatis 允许使用插件来拦截的方法调用包括: Executor (update, query, flushState ...
- IP config with netsh under windows
================================================= CHINAUNICOME.bat route delete 0.0.0.0 mask 0.0.0.0 ...
- 配置wbepack
proxyTable:{ //反向代理 先建立连接 '/sexLady':{ target:url//请求地址 暗号:'/sexLady ' changeOrigin:true ,//类似baseUr ...