ormlite介绍一
概述
ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。
官方网站:http://ormlite.com/
如果需要开发android,只需要下载core和android两个jar包:
ORMlite的使用
1,建立映射关系
Ormlite与数据库的映射关系式通过注释来说明的。 注释分为对于表的和对于单个列的:@DatabaseTable ,注释表的, @DatabaseField 注释单个列的。 看例子很好很好懂:
解释一下上面的例子,如果想以类student来建立一张表。
· 首先注释:table,@DatabaseTable 如果默认为类名的话,后面不需要添加类名注释。
· 然后:确定需要的字段,在字段上面添加注释:@DatabaseField 如果对字段有特别的要求,那么添加以下相关的注释,例如id。
同理,school类为:
@DatabaseTable(tableName = "school")
public class School {
@DatabaseField(generatedId=true)
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField
private String location;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
2,建立数据库和基本的工具
在android的开发中,google原版封装了一个SqliteOpenHelper,供开发者调用,在OrmLite中,对原版的工具进行了加强,提供一个继承自SqliteOpenHelper的OrmLiteSqliteOpenHelper工具。
像android一样,我们继承这个工具类。
public class DBHelper extends OrmLiteSqliteOpenHelper{
private final static int DATABASE_VERSION = 1;
Dao<Student, Integer> mStudentDao;
Dao<School, Integer> mSchoolDao;
private static final String DB_NAME = "orm";
private static DBHelper mDbHelper;
private DBHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
}
public static DBHelper getInstance(Context context) {
if (mDbHelper == null) {
mDbHelper = new DBHelper(context);
}
return mDbHelper;
}
@Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
try {
TableUtils.createTableIfNotExists(connectionSource, Student.class);
TableUtils.createTableIfNotExists(connectionSource, School.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
int arg3) {
}
public Dao<Student, Integer> getStudentDao() throws SQLException {
if (mStudentDao == null) {
mStudentDao = getDao(Student.class);
}
return mStudentDao;
}
public Dao<School, Integer> getSchoolDao() throws SQLException {
if (mSchoolDao == null) {
mSchoolDao = getDao(School.class);
}
return mSchoolDao;
}
}
如果写过android的SqliteOpenHelper对这个继承类的写法一定不会陌生。
我解释一下这个的写法:
· 构造函数:
必须调用父类的构造函数,能给它提供的参数有:来自android的context,数据库名称,和版本号。
· GetInstance方法:
这个只是为了方便,让DbHelper只保留一个对象的实例,即单例模型。
· OnCreate
实现父类的抽象方法,创建数据库。
· OnUpgrade
在构造方法中的version如果改变的话,调用这个方法,至于想做什么,这个你来定。常用于app 的版本更新。
· getStudentDao和 getSchoolDao
获取数据库的dao对象,这些dao对象用于后来的数据库操作。dao的声明时泛型了两个参数,第一个是dao操作的关联对象,第二个是标记数据表的ID。这个ID一般很少使用,除非对数据表的ID进行操作的时候。
3,测试
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
DBHelper mDbHelper;
Dao<Student, Integer> mStudentDao;
Dao<School, Integer> mSchoolDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDbHelper = DBHelper.getInstance(this);
try {
mSchoolDao = mDbHelper.getSchoolDao();
mStudentDao = mDbHelper.getStudentDao();
} catch (SQLException e) {
Log.e(TAG, "constructor exception", e);
}
testDao();
}
private void testDao() {
Student student1 = new Student();
student1.setName("miles");
student1.setSchoolId(0);
Student student2 = new Student();
student2.setName("li");
student2.setSchoolId(0);
School school1 = new School();
school1.setName("university");
school1.setLocation("shanghai");
School school2 = new School();
school2.setName("middle school");
school2.setLocation("hubei");
try {
mSchoolDao.create(school1);
mSchoolDao.create(school2);
mStudentDao.create(student1);
mStudentDao.create(student2);
//获取表中所有的student。
List<Student> students=mStudentDao.queryForAll();
Log.e(TAG, "before delete the student list:size is:"+students.size());
for (int i = 0; i < students.size(); i++) {
Log.e(TAG, students.get(i).getName());
}
mStudentDao.delete(student1);
students=mStudentDao.queryForAll();
Log.e(TAG, "after delete the student list:"+students.size());
for (int i = 0; i < students.size(); i++) {
Log.e(TAG, students.get(i).getName());
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在DDMS里面的 File Explore里面的data/data/项目包名/databases里面可以看到有一个db的文件。
可以看到log 里面打出来的
- 在 Go 语言中,正确的使用并发
- Injectify:一款执行MiTM攻击的工具
- 看我如何发现Google云平台漏洞并获得$7500赏金
- Go语言写Web 应用程序
- 小萝莉说Crash(一):Unrecognized selector sent to instance xxxx
- 游戏服务器之多线程发送(上)
- 游戏服务器之多线程发送(中)
- 游戏服务器之多线程发送(下)
- 【团队分享】手机QQ:升级iOS8.3后,发图就崩,为哪般?
- golang 字符串操作实例
- 【团队分享】刀锋铁骑:常见Android Native崩溃及错误原因
- OpenShift企业版安装:单Master集群
- http线程池的设计与实现(c++)
- iOS崩溃堆栈符号化,定位问题分分钟搞定!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android ScrollView嵌套横向滑动控件时冲突问题
- Android用户输入自动提示控件AutoCompleteTextView使用方法
- Android自定义View实现水波纹效果
- Android如何获取系统通知的开启状态详解
- Handler实现线程之间的通信下载文件动态更新进度条
- Android下Button实现图文混排效果
- android handler.post和handler.sendMessage的区别和联系
- 3小时带你开发一款商城类小程序(零基础入门小程序系列)
- Android 隐式Intent的实例详解
- Android编程使用加速度传感器实现摇一摇功能及优化的方法详解
- 微信小程序分页加载数据~上拉加载更多~小程序云数据库的分页加载
- TextView实现跑马灯效果 就这么简单!
- Android自带emoji表情的使用方法详解
- Android EditText实现输入表情
- Android编程实现使用Intent传输包含自定义类的ArrayList示例