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. 2013 imac 安装 win7

    昨天晚上安装imac win7系统,其实步骤是很简单的,首先需要一个用boot camp助手做好的win7安装U盘或者有个外接光驱加一张win7光盘,然后用boot camp助理划分一个分区给win7 ...

  2. 技术分享:逆向分析ATM分离器

    文章内容仅供技术交流,请勿模仿操作! 背景(作者) 每一次外出时, Elizabeth和我总是格外的小心,同时把我们身上的钱藏在特殊的皮带上面,这样还不够,我们还采取了“狡兔三窟”的方式来藏身上带的银 ...

  3. BZOJ 1093 最大半连通子图

    缩点求最长链. #include<iostream> #include<cstdio> #include<cstring> #include<algorith ...

  4. JQuery基础DOM操作

    DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作.但实际上一般开发者都习惯性的先定义好HTML结构,但这样就非常不灵活了. 试想下这样的情况:如 ...

  5. dll强签名的由来和作用

    C# dll强签名介绍 之前基本没有这个概念,直到有一天我们的dll被反编译了,导致我们的代码基本上被看到了,才想起来要保护dll的安全性,因为C#语言的在编译过程中会产生中间语言导致dll很容易被反 ...

  6. java学习第六天

    目标 1.  块 2.  GC(了解) 3.  package import 4.  封装 一.块 {}  分类 1.普通块 作用: 组织代码.解决变量的作用域.节约了内存. 在同一个作用域内,不能声 ...

  7. D - Charm Bracelet 背包问题

      Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Pra ...

  8. C# 添加图片资源

    /********************************************************************** * C# 添加图片资源 * 说明: * 个人觉得图片资源 ...

  9. X86平台乱序执行简要分析(翻译为主)

    多处理器使用松散的内存模型可能会非常混乱,写操作可能会无序,读操作可能会返回不是我们想要的值,为了解决这些问题,我们需要使用内存栅栏(memory fences),或者说内存屏障(memory bar ...

  10. shell脚本-获取时间

    获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用 ...