[ 转]Android快速开发–使用ORMLite操作数据库
OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言。在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来记一下吧,感谢大神团队贡献如此实用的开源框架,这里是OrmLite的官方网址:http://ormlite.com/
准备工作–创建数据库及数据表
ORMlite通过Java注解的方式来建立起与数据库的映射关系,在这里我们以一个实例来进行说明,如我们现在想要建立一个简单的数据库test.db并创建一张表person来记录一个人的名字,年龄,住址等等。
创建Bean类
首先,建立我们的Bean类Person,并通过注解的方式与数据库联系起来
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
@DatabaseTable(tableName = "person")public class Person { @DatabaseField(generatedId=true) private int id; @DatabaseField(columnName="name") private String name; @DatabaseField(columnName="age") private int age; @DatabaseField(columnName="address") private String address; /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ public int getAge() { return age; } /** * @param age the age to set */ public void setAge(int age) { this.age = age; } /** * @return the address */ public String getAddress() { return address; } /** * @param address the address to set */ public void setAddress(String address) { this.address = address; }} |
在这里我们创建了Bean类,并与数据库建立了联系,有两件事是我们需要做的
1.需要在@DatabaseTable注解中填入表名
2.在@DatabaseField(columnName=”“)填入字段名,设置字段的属性等等
字段属性说明
ORMLite为我们提供了全面的字段属性的支持,下面我们来具体看一下吧:
- cloumnName:指定字段名,不指定则变量名作为字段名
- canBeNull:是否可以为null
- dataType:指定字段的类型
- foreign 指定这个字段的对象是一个外键,外键值是这个对象的id
- foreignAutoCreate 外键不存在时是否自动添加到外间表中
- foreignAutoRefresh 外键值,自动刷新
- foreignColumnName外键字段指定的外键表中的哪个字段
- generatedId:指定字段为自增长的id,不能id,generatedIdSequence通用
- id:指定字段为id
- index:索引
- persisted:指定是否持久化此变量,默认true
- throwIfNull,如果空值抛出异常
- useGetSet:指定ormlite访问变量使用set,get方法默认使用的是反射机制直接访问变量
- unique:字段值唯一
- uniqueIndex 唯一索引
- uniqueCombo整列的值唯一
创建数据库
与Android中的数据库创建相似,使用OrmLite创建数据库需要我们创建一个SqlOpenHelper继承OrmLiteSqliteOpenHelper,在OrmLiteSqliteOpenHelper也有两个重要方法,分别是onCreate和onUpgrade,负责数据库创建以及升级时的操作
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
public class MySqlOpenHelper extends OrmLiteSqliteOpenHelper { private Dao<Person, Integer> mPersonDao; public MySqlOpenHelper(Context context) { super(context, "test", null, 1); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) { // TODO Auto-generated method stub try { //创建数据表 TableUtils.createTableIfNotExists(arg1, Person.class); } catch (java.sql.SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3) { // TODO Auto-generated method stub } public Dao<Person, Integer> getPersonDao() throws java.sql.SQLException { if (mPersonDao == null) { mPersonDao = getDao(Person.class); } return mPersonDao; }} |
Dao是一个很重要的类, 这些Dao对象用于以后的数据库操作,其包含两个泛型,第一个泛型表DAO操作的类,第二个是标记数据表的ID。
数据库操作
创建了我们自己的数据库之后就可以来,对数据库操作了,接下来我们看看如何进行数据库的增删查改
插入操作
这些方法使用起来都比较简单,我们只需将自己的Bean传入到下列方法中即可
- create:插入一条数据
- createIfNotExists:如果不存在则插入
- createOrUpdate:如果存在则更新
查询操作
OrmLite为我提供了一系列的查询操作,方法很多,而且很多都是只看方法名就可以知道的,这里就不逐一介绍了,在这里介绍一下如何使用QueryBuilder进行复杂查找。
- 首先调用personDao.queryBuilder();获得该Dao下的QueryBuilder对象,
- 接下来设置QueryBuilder的查询条件,
- 最后通过QueryBuilder的query方法获得List对象,
下面介绍几个常用的builder下的查询,
1.多字段条件查询:
|
1
2
3
|
QueryBuilder builder = dao.queryBuilder();builder.where().eq("字段名1","条件1").and.eq(""字段名2","条件2");builder.query(); |
2.查询并按顺序输出
|
1
2
3
|
QueryBuilder<Person, Integer> builder = dao.queryBuilder();builder.orderBy("字段名", true);builder.query(); |
orderBy的方法第一参数表示按那个字段进行排序,第二个参数表示是否为升序。
3.分页查询
|
1
2
3
4
|
QueryBuilder<Person, Integer> builder = dao.queryBuilder();builder.offset(10);//表示查询的起始位置builder.limit(10);//表示总共获取的对象数量builder.query(); |
删除和更改操作
与查询操作类似,ORMLite同样为我们提供了一系列的方法,同时也提供了复杂删除,复杂更改的DeleteBuilder和UpdateBuilder,其用法与QueryBuilder相似,就不详细介绍了。
将数据库放置在SD卡
Android创建数据库默认的存储路径是在/data/data/packagename/database 目录之下,一方面如果数据库庞大将占用系统存储空间,另一方面如果没有获得系统ROOT权限,将不能直观的看到该数据库。所以在最后介绍一下如何将数据库建立在指定的SD卡目录之下。
这个在ORMLite中并没有提供,自己来动手写一写吧。阅读一下Android的源码可以很容易发现,Android数据库存放的目录是由ContextWrapper类下的public File getDatabasePath(String name)方法决定的,那么我们只需创建自己的Context覆盖该方法即可。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
public class DatabaseContext extends ContextWrapper { private static final String ROOT_SDCARD = Environment .getExternalStorageDirectory().getAbsolutePath(); private String dbDir; public DatabaseContext(Context base, String path) { super(base); dbDir = path; } @Override public File getDatabasePath(String name) { // 判断是否存在sd卡 boolean sdExist = android.os.Environment.MEDIA_MOUNTED .equals(android.os.Environment.getExternalStorageState()); if (!sdExist) {// 如果不存在, Log.e("Database error", "SD卡不存在"); return null; } // 判断目录是否存在,不存在则创建该目录 File dirFile = new File(dbDir); if (!dirFile.exists()) dirFile.mkdirs(); // 标记数据库文件是否创建成功 boolean isFileCreateSuccess = false; String dbPath = dbDir + "/" + name;// 数据库路径 File dbFile = new File(dbPath); // 如果数据库文件不存在则创建该文件 if (!dbFile.exists()) { try { isFileCreateSuccess = dbFile.createNewFile();// 创建文件 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else isFileCreateSuccess = true; // 返回数据库文件对象 if (isFileCreateSuccess) return dbFile; else return null; } @Override public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) { SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase( getDatabasePath(name), null); return result; } /** * Android 4.0会调用此方法获取数据库。 * */ @Override public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory, DatabaseErrorHandler errorHandler) { SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase( getDatabasePath(name), null); return result; }} |
之后我们在创建SQLOpenHelper时,只需传入我们自己的DatabaseContext 即可,如
|
1
2
|
SdCardDBHelper dbHelper = new SdCardDBHelper(new DatabaseContext( MainActivity.this, path), "person.db"); |
ORMLite相关文件下载
附上ORMLite相关jar文件以及官方文档说明:点击下载
[ 转]Android快速开发–使用ORMLite操作数据库的更多相关文章
- Android 快速开发系列 ORMLite 框架最佳实践
比较靠谱的Helper的写法: 1.DatabaseHelper package com.zhy.zhy_ormlite.db; import java.sql.SQLException; impor ...
- Android 快速开发系列 ORMLite 框架最佳实践之实现历史记录搜索
首先在build.gald中添加compile 'com.j256.ormlite:ormlite-android:4.48'的引用 compile 'com.j256.ormlite:ormlite ...
- 【转】Android 使用ORMLite 操作数据库
Android 使用ORMLite 操作数据库 用过ssh,s2sh的肯定不会陌生 ,应该一学就会 第一步: 下载ormlite-android-4.41.jar和ormlite-core-4.4 ...
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
- Android 快速开发系列 打造万能的ListView GridView 适配器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...
- Android快速开发不可或缺的11个工具类
Android快速开发不可或缺的11个工具类 :http://www.devst ore.cn/code/info/363.html
- Android快速开发不可或缺的11个工具类(下载)
功能分类:工具 支持平台:Android 运行环境:Eclipse 开发语言:Java 开发工具:Eclipse 源码大小:11.45KB 下载地址:ht ...
- Android 使用ORMLite 操作数据库
参考:http://blog.csdn.net/cjjky/article/details/7096987 ormlite 方法查询:http://ormlite.com/javadoc/ormlit ...
- Android快速开发系列 10个常用工具类
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38965311,本文出自[张鸿洋的博客] 打开大家手上的项目,基本都会有一大批的辅 ...
随机推荐
- IIS WebForm开发基础
Winform是在客户电脑操作的. WebForm是客户机通过一个IP地址,到IIs服务器,再进行信息反馈,在非客户机上操作的. 一.WebForm 运行流程(1)需要访问数据库(aspx) 客户机打 ...
- VC++实现在系统托盘来新消息闪烁,鼠标悬停显示窗口
转载:http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c8115/How-to-Implement-a-Mouse ...
- JAVA数字想加并输出
Java课后作业博文 1.设计思想:JAVA里面的Scnner类可以将用户输入的各种字符转化为其他类型.例如 Scanner sc = new Scanner(System.in); int a = ...
- 高通安卓调试LCD几方面总结
来公司上班现在已经整整一个月了,蔽人不才,能力有限,学习进度缓慢,不过也是有一点点的收获与心得,在这里写出来与大家分享,养成良好的记录习惯也免得后忘记. 不啰嗦了,开入正题.来公司一个月左右的时间,主 ...
- Android 内存溢出解决方案(OOM) 整理总结
在最近做的工程中发现加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提供了很多方法,但自己感觉有点乱,特此,今天在不同型号的三款安卓手机上做了测试,因为有效果也有结果,今天小马就做个详细的总 ...
- CSS属性前的 -webkit, -moz,-ms,-o
-moz-对应 Firefox, -webkit-对应 Safari and Chrome-o- for Opera-ms- for Internet Explorer(microsoft) 在CSS ...
- 【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)
VB6.0应用程序安装包的生成,利用其自带的打包工具生成的安装程序很简陋,一点不美观:如果想让自己的应用程序安装的时候显得高大上一点,本教程提供使用Setup Factory 9.0制作安装包的方法. ...
- Codeforces Round #281 (Div. 2) D. Vasya and Chess 水
D. Vasya and Chess time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 关于deferred
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- GitHub上不错的Android开源项目(二)
收集相关系列资料,自己用作参考,练习和实践.小伙伴们,总有一天,你也能写出 Niubility 的 Android App :-) 系列文章如下: GitHub上不错的Android开源项目(一):h ...