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",我在无意中发现了它们所具有的相同的一些用法,先举 ...
随机推荐
- python中使用pymongo操作mongo
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...
- go陷阱
必看的题目:https://blog.csdn.net/weiyuefei/article/details/77963810 1.关于值传递.引用传递与指针传递 当一个变量或者新值被创建时, 如果没有 ...
- tomcat多实例方案启动脚本
批量启动 #!/bin/sh BASE_PATH="/usr/local/tomcat8/tomcat-ins/"bash $BASE_PATH/web1/tomcat.sh st ...
- C_数据结构_循环实现求阶乘
# include <stdio.h> int main(void) { int val; printf("请输入一个数字:"); printf("val = ...
- js方法中拼接html时点击事件中拼接字符串参数
1,代码 var html = '<a href="#" onclick="tableDelete(\''+ row.labelid +'\')"> ...
- 《Linux内核设计与实现》第八周读书笔记——第四章 进程调度
<Linux内核设计与实现>第八周读书笔记——第四章 进程调度 第4章 进程调度35 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间,进程调度程序可看做在可运行态进程之间分配 ...
- 20135327--linux内核分析 实践二
内核模块编译 1.实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率很高,但可扩展性 ...
- 07-java学习-方法重载-idea集成开发工具学习-项目-模块-包
方法重载的概念? 方法重载的好处? 集成开发工具idea的学习 下载 安装 设置 建项目 导入项目 建模块 导入模块 建包 复制粘贴包 建类 复制粘贴类 运行 调试
- python中的hasattr()、getattr()、setattr()
hasattr()的用法和理解--hasattr(obj, target) 判断对象obj中是否含有,目标target属性,然后返回布尔值,如果有返回True,没有返回False. >>& ...
- Java的Spring内实现的mini版内存"计数器"功能
工期紧急,不让用Redis,自己实现了一个Spring内的mini版内存"计数器"功能,很简陋,和业务耦合太紧密,需要改进. public Long getCreationCoun ...