TigerDB是一个简单的Android ORM框架,它能让你一句话实现数据库的增删改查,同时支持实体对象的持久化和自动映射,同时你也不必关心表结构的变化,因为它会自动检测新增字段来更新你的表结构。

该库主要包括如下几个要点:

  1. 根据实体对象自动建表、新增字段(SQLite不支持删除字段列)
  2. 支持注解配置表名、字段名、字段默认值、主键是否自增长以及哪些字段不作为数据表中的映射字段
  3. 直接映射实体对象到SQLite数据库,实现一行代码对SQLite数据库增删改查
  4. 支持在SDCard中新建数据库db
  5. 解决在onCreate,onUpgrade中执行数据库其他操作时出现的异常(java.lang.IllegalStateException: getDatabase called recursively)
  6. 支持原生SQL语句操作数据库

该ORM库使用过程中的主要类说明:

  1. SQLiteDBConfig:主要用于设置数据库的名字、创建路径、版本号、数据创建更新时的监听
  2. SQLiteDB:创建完数据库之后,主要通过此类来操作数据库的增删改查
  3. SQLiteDBFactory:该类主要用于创建SQLite数据库,同时缓存当前创建的SQLiteDB对象
  4. CursorUtil:查询数据库时,检测游标对象Cursor是否正常,解析Cursor数据为实体对象
  5. IDBListener:数据库创建、升级时的监听类,提供了空实现SimpleDBListener
  6. Column:该注解用来设置字段名、字段默认值
  7. PrimaryKey:该注解用来设置主键、主键字段名、以及主键是否为自增长
  8. Table:该注解用来设置表名,不设置的话默认类名为表名
  9. NotDBColumn:该注解用来设置哪些实体属性不映射到数据表中

主要用法如下:

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//新建实体,可以通过注解@Table设置表名,如果不设置默认以类名User作为表名
public class User {
//设置主键id为自增长,也可以通过注解@Column设置字段名或字段默认值
@PrimaryKey(isAutoGenerate=true)
private long id;
 
private String name;
 
//设置age字段默认值为1
@Column(defaultValue="1")
private int age;
 
//该字段不作为数据表中的字段
@NotDBColumn
private String bz;
 
//必须实现无参构造
public User() {
}
 
public User(String name) {
super();
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
 
@Override
public String toString() {
return "{id=" + id + ",name=" + name + "}";
}
}
 
//SQLite相关配置,包括数据库名字、创建路径、版本号、数据创建和升级时的监听
SQLiteDBConfig config = new SQLiteDBConfig(this);
//设置数据库创建更新时的监听,有提供空实现:SimpleDBListener
config.setDbListener(new IDBListener() {
@Override
public void onUpgradeHandler(SQLiteDatabase db, int oldVersion, int newVersion) {
 
}
 
@Override
public void onDbCreateHandler(SQLiteDatabase db) {
showLongToast("数据库创建成功");
}
});
//创建db,在创建数据库的时候,不需要在onDbCreateHandler手动去创建相关的数据表,在对实体对象进行数据操作的时候,会自动判断表是否存在,不存在的话会自动创建,同时如果有新增的字段也会自动更新表结构
SQLiteDB db = SQLiteDBFactory.createSQLiteDB(config);
 
//保存单个实体对象
User user = new User("添加单个对象");
int rtn = db.save(user)
 
//保存集合对象
List list = new ArrayList();
int rtn = db.save(list)
 
//查询User表中的所有数据
List list = db.queryAll(User.class);
 
//根据实体id(主键)查询User
User user = db.query(User.class, "1");
 
//查询User表中的数据总数
long total = db.queryTotal(User.class);
 
//删除指定实体对象
db.delete(user);
 
//更新实体对象
db.update(user);
 
//分页查询
db.queryPage(claxx, curPage, pageSize);
 
//根据SQL查询
Cursor cursor = db.query(sql, bindArgs);

源码及Demo地址:https://github.com/huyongli/TigerDB,大家可以自行下载查看

简单实用的Android ORM框架TigerDB的更多相关文章

  1. 最好的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  2. Android ORM 框架之 greenDAO 使用心得

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

  3. 推荐的Android ORM框架

    1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...

  4. 最受欢迎的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  5. Android ORM 框架之 greenDAO

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

  6. LogCook 一个简单实用的Android日志管理工具

    众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...

  7. Android orm 框架xUtils简介

    数据库操作建议用ORM框架,简单高效.这里推荐xUtils,里面包含DBUtils.github地址:https://github.com/wyouflf/xUtils 获得数据库实例建议用单例模式. ...

  8. android ORM框架ORMLite封装

    源码:http://download.csdn.net/detail/a924571572/9415506 一.框架效率对比 由于目前公司里面android端数据的数据量基本在千条以内,所以选择了更为 ...

  9. android ORM 框架 search

    1. ORMLite 特性: 通过在类上添加注解设置类 强大抽象DAO类 QueryBuilder 可以灵活的构造简单和复杂的查询语句 支持MySQL, Postgres, Microsoft SQL ...

随机推荐

  1. poj2769 暴力

    //Accepted 208 KB 157 ms //纯暴力 //vis数组初始化时要用多少设置多少,不然TLE #include <cstdio> #include <cstrin ...

  2. Canopy测试IPython控制台输出

    Canopy测试IPython控制台输出

  3. 如何由Height Map生成Normal Map

    转自:http://www.cnblogs.com/cxrs/archive/2009/11/01/1594155.html Nvidia和ATI都有相应的工具把Heightmap转成NormalMa ...

  4. hdu 2090

    PS:输入麻烦...我还以为是输入一个就输出一个...后来看了大神的才知道....暴力破解了... 代码; #include "stdio.h" int main(){ ,a,b; ...

  5. 控制台应用程序中Main函数的args参数

    在VS中添加参数 菜单   项目   --   你的项目属性   --   调试   --   启动选项   --   命令行参数 参数之间用空格分隔开就可以了,如果参数有空格,以双引号风格

  6. PHP、C++的重载

    首先明确一点:PHP重载是用在面向对象的类当中,而不支持函数重载. 这点与C++不一样,在C++当中,重载可以用于面向过程和面向对象,而且方法也不一样. 在C++中,重载适用于当函数名相同时,函数所需 ...

  7. PHP中的数组(一)

    一.数组的概述    1.数组的本质:管理和操作一组变量    2.数组是复合类型    3.数组中可以存储任意长度的数据,也可以存储任意类型的数据    4.数组就可以完成其它语言数据结构的功能(链 ...

  8. two Sum ---- LeetCode 001

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  9. Unity3D ShaderLab 模拟精灵动画

    Unity3D ShaderLab 模拟精灵动画 在上一篇,介绍了通过Shader 模拟纹理运动,那么更深一步讲,我们也可以把帧动画的精灵纹理运动通过shader实现. 虽然大家都是在游戏脚本中做更高 ...

  10. 编程之美2.5:寻找最大的K个数

    编程之美2.5:寻找最大的K个数 引申:寻找第k大的数: 方法一: // 选择第k大的数(通过改进快速排序来实现) public static void SelectShort(int[] array ...