【转】Android 使用ORMLite 操作数据库
用过ssh,s2sh的肯定不会陌生 ,应该一学就会
第一步:
下载ormlite-android-4.41.jar和ormlite-core-4.41.jar两个jar包,放入工程的libs文件夹内,然后右键 builder path-->add path
第二步:对你要持久化的类进行注解(记住.提供一个默认无参构造)
- @DatabaseTable(tableName="student") tableName 表明
- public class Student {
- public static final String ID="student_id";
- public static final String NAME="student_name";
- public static final String LASTNAME="student_lastname";
- public static final String RESOURCE="student_resource";
- public static final String TEACHER_ID="tacher_id";
- @DatabaseField(generatedId=true,useGetSet=true,columnName=ID)
- private int id;
- @DatabaseField(foreignColumnName=Teacher.ID,foreign=true,foreignAutoCreate=true)
- private Teacher teacher_id;
- @DatabaseField(useGetSet=true,columnName=NAME)
- private String name;
- @DatabaseField(useGetSet=true,columnName=LASTNAME)
- private String lastName;
- @DatabaseField(useGetSet=true,columnName=RESOURCE)
- private double resource;
- 一系列的set get 方法...
过一会将详细的列出各种注解的意思,这里只需要知道 @DatabaseTable 指定类对应的表明,@DatabaseField 对应的字段名,
第二步:
创建一个database helper类,继承OrmLiteSqliteOpenHelper 实现 onCreate 和 onUpgrade ,这个类类似于 android 的SQLiteOpenHelper方法 ,大家应该知道这个类的作用了,创建删除数据库应该使用TableUtils工具类的方法.一会下面介绍
第二步:分两种情况,一个直接在Activity中使用OrmLite 创建的dao类
(1)这时候,你的Activity类应该实现OrmLiteBaseListActivity, OrmLiteBaseService或者 OrmLiteBaseTabActivity,然后在类中使用getHelper().getDao(Class clazz);创建你的DAO 对象,然后使用其中的方法对数据进行操作.
(2)有些人和我一样.不喜欢将DAO层和Activity层放在一起,喜欢讲操作数据库的类单独放在DAO包中,形成DAO层,貌似是web开发留下的..........................习惯
这时候,我们需要在自定义的DAO中使用 OrmLiteSqliteOpenHelper helper=OpenHelperManager.getHelper(context,BasicDAO.class);方法来得到helper对象,这个对象需要保持,根据文档上说在销毁对象的时候需要OpenHelperM anager.releaseHelper();使用这个方法来释放掉helper对象,然后使用helper对象的getDao(Student.class);方法得到DAO类,
然后我们就可以使用DAO类,完成各种各样的数据库 增删改操作.
例如:
- public class StudentDAO{
- Dao<student integer=""> dao=null;
- private Context context=null;
- OrmLiteSqliteOpenHelper helper=null;
- public StudentDAO(Context context) {
- this.context=context;
- // TODO Auto-generated constructor stub
- helper=OpenHelperManager.getHelper(context,BasicDAO.class);
- try {
- dao=helper.getDao(Student.class);
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Override
- <span style="white-space:pre"> </span>protected void finalize() throws Throwable {
- <span style="white-space:pre"> </span>// TODO Auto-generated method stub
- <span style="white-space:pre"> </span>OpenHelperManager.release();//释放掉helper
- <span style="white-space:pre"> </span>super.finalize();
- <span style="white-space:pre"> </span>}
- }
- </student>
接下来介绍..各种各样的注解
首先介绍 @DatabaseTable
参数:tableName指定表明,没有将使用类名作为表明
@DatabaseField
| cloumnName:指定字段名,不指定则变量名作为字段名 | canBeNull:是否可以为null | |
| dataType:指定字段的类型 | defaultValue:指定默认值 | width:指定长度 |
| id:指定字段为id | generatedId:指定字段为自增长的id,不能id,generatedIdSequence通用 | foreign 指定这个字段的对象是一个外键,外键值是这个对象的id |
| useGetSet:指定ormlite访问变量使用set,get方法默认使用的是反射机制直接访问变量 | throwIfNull,如果空值抛出异常 | persisted:指定是否持久化此变量,默认true |
| unique:字段值唯一 | uniqueCombo整列的值唯一 | index:索引 |
| uniqueIndex 唯一索引 | foreignAutoRefresh 外键值,自动刷新 | foreignAutoCreate 外键不存在时是否自动添加到外间表中 |
| foreignColumnName外键字段指定的外键表中的哪个字段 |
@ForeignCollectionField 表示这个表中的数据在其他表中是外键(其他表的某个字段使用@DatabaseField(foreignColumnName=一个表的id键名,foreign=true)
eager 表示该集合是在初始化这个对象的时候,是否讲对象取出还是在遍历的时候才取出,默认false遍历的时候才取出,size()方法也会引起遍历
这个注解注解的字段只能是ForeignCollection<T> or Collection<T> 对象
TableUtils
接下来介绍TableUtils完成对数据中的表进行创建,删除,清空表格,只要看一下它的静态方法.做过程序的应该都会
Dao<T,V>
包含两个泛型,第一个泛型表DAO操作的类,第二个表示操作类的主键类型
主要方法:
create:插入一条数据
createIfNotExists:如果不存在则插入
createOrUpdate:如果指定id则更新
queryForId:更具id查找
update 查找出数据
refresh的解释:If you want to use other elds in the Account, you must call refresh on the accountDao class to get the Account object lled in.
delte 删除数据
queryBuilder() 创建一个查询生成器:进行复杂查询
deleteBuilder() 创建一个删除生成器,进程复杂条件删除
updateBuilder() 创建修条件生成器,进行复杂条件修改
条件查找器DeleteBuilder,QueryBuilder,UpdateBuilder
查找器是帮助拼接条件语句的.比如查找器中有 where()方法 and()方法 eq()方法 lt()方法 qt()方法 between方法这些方法很直观..很容易都明了什么意思
最后使用prepare()方法生成条件使用DAO.query || DAO.delete|| DAO.update 方法执行
可以使用查找生成器QueryBuilder 的 orderby limit offset 方法进行排序,分页,
【转】Android 使用ORMLite 操作数据库的更多相关文章
- Android 使用ORMLite 操作数据库
参考:http://blog.csdn.net/cjjky/article/details/7096987 ormlite 方法查询:http://ormlite.com/javadoc/ormlit ...
- [ 转]Android快速开发–使用ORMLite操作数据库
OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言.在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来 ...
- Android——使用SQLiteDatabase操作SQLite数据库
除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NUL ...
- android: SQLite使用 SQL 操作数据库
虽然 Android 已经给我们提供了很多非常方便的 API 用于操作数据库,不过总会有一些 人不习惯去使用这些辅助性的方法,而是更加青睐于直接使用 SQL 来操作数据库.这种人 一般都是属于 SQL ...
- Android——采用SQLiteDatabase操作SQLite数据库
除了能够使用文件或SharedPreferences存储数据.还能够选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NUL ...
- Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作
一.前言 在手机中进行网络连接不仅是耗时也是耗电的,而耗电却是致命的.所以我们就需要数据库帮助我们存储离线数据,以便在用户未使用网络的情况下也可以能够使用应用的部分功能,而在需要网络连接的功能上采用提 ...
- 小米红米1 android 4.4.4上操作数据库异常问题
产生的问题: 小米红米1 android 4.4.4上,按HOME键,应用进入后台,再启动,应用进程直接挂掉 解决的方法: 这个是操作数据库,数据库关闭之后导致的异常,解决的方法: //4.0以上的版 ...
- Android学习之基础知识九 — 数据存储(持久化技术)之使用LitePal操作数据库
上一节学习了使用SQLiteDatabase来操作SQLite数据库的方法,接下来我们开始接触第一个开源库:LitePal.LitePal是一款开源的Android数据库框架,它采用了对象关系映射(O ...
- Android:日常学习笔记(10)———使用LitePal操作数据库
Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...
随机推荐
- .NET设计模式(15):结构型模式专题总结(转)
摘要:结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式).这些结构型模式,它们在某些方面具有很大的相似 ...
- 关于java调用linux shell 的问题
问题的提出: shell脚本要做离线的数据处理任务 java调用脚本,将这种处理任务封装成webservice 特点: shell处理单个时间长 每次要处理文件量大 这里目前只做调用分析: 原来的: ...
- MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群)
MariaDB Galera Cluster 部署(如何快速部署 MariaDB 集群) OneAPM蓝海讯通7月3日 发布 推荐 4 推荐 收藏 14 收藏,1.1k 浏览 MariaDB 作为 ...
- 利用Openvswitch实现不同物理机中的Docker容器互连
1. 测试环境 75机(10.11.150.75):Red Hat Enterprise Linux Server 7.0,无外网访问权限,已安装Docker Server 74机(10.11.150 ...
- 互联网 IT 精英:龙泉寺静心之旅
最近几天,大家都被<北京龙泉寺:最强科研组织!扫地僧点化微信之父,清华北大学子排队出家>这篇文章刷屏了.无论是「微信之父」张小龙闭关修行,还是北大清华中科院的硕士生.博士生义工,亦或是「贤 ...
- Ruby中的Profiling工具
看看如何调试Ruby的性能问题 李哲 - APRIL 08, 2015 Ruby内置的profiler 内置的profiler实现的很简单,在ruby2.2中只有150行代码,大家可以看看它的实现pr ...
- 简单的说说jsonp
jsonp和json有什么区别?json是一种文件格式,而jsonp是一种技术方法. jsonp会被人认为是一种新的跨域技术,其实本质上和利用带有src属性的标签进行js跨域本质没什么区别. 区别就是 ...
- HDU3341 Lost's revenge(AC自动机&&dp)
一看到ACGT就会想起AC自动机上的dp,这种奇怪的联想可能是源于某道叫DNA什么的题的. 题意,给你很多个长度不大于10的小串,小串最多有50个,然后有一个长度<40的串,然后让你将这个这个长 ...
- Jquery+Ajax+php学习笔记
昨天研究ajax,想作个登陆框,无刷新就把用户名密码提交给后台php程序,验证后发回. 几经琢磨 总算出来前台代码: <script src="./javascript/jquery- ...
- 从.NET 1.1 升级到.NET 4.0 遇到 线程间操作无效: 从不是创建控件 [XX] 的线程访问它.
有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数 问题原因是 .NET2.0 以后拒绝 ...