ORMLite是一种对象关系映射(Object-Relational Mapping, 简称ORM)工具,可用于读写数据。ORMLite是一个框架,更佳方便对多数据进行操作,特别是对于那些对SQL语句不熟悉的人
使用:
- 下载 ORMLite Jar
首先去ORMLite官网下载jar包,对于Android为:ormlite-android-4.48.jar
和ormlite-core-4.48.jar
; - 创建Bean
User.java
/*
* 当定义表时,第一个建议便是使用final变量定义数据库表名和列名,
* 该方法可以简化代码的维护工作,不过本例并没用使用*/
@DatabaseTable(tableName = "tb_user") //@DatabaseTable:标明这是数据库的一张表
public class User {
/*@DatabaseField:标明这是表中的字段
columnName: 为该字段在数据中的列名
generatedId:表示id为自增长*/
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "desc")
private String desc;
/*ORMLite需要用到无参构造方法
* 当ORMLite需要创建User类时会使用到无参数的构造方法,
* 并通过反射机制设置成员变量,也可以使用setter方法设置成员变量*/
public User() {
}
public User(String name, String desc) {
this.name = name;
this.desc = desc;
}
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 getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
- 创建数据库
原生的数据库操作,需要继承SQLiteOpenHelper,这里我们需要继承OrmLiteSqliteOpenHelper -
public class DatabaseHelper extends OrmLiteSqliteOpenHelper { //数据库文件的名称 private static final String TABLE_NAME = "sqlit-test.db"; /*userDao , 每张表对应一个*/ private Dao<User, Integer> userDao; private DatabaseHelper(Context context) { super(context, TABLE_NAME, null, 2); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try{ //创建表 createTable(connectionSource, User.class); }catch (SQLException e){ e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { try{ dropTable(connectionSource, User.class, true); onCreate(sqLiteDatabase, connectionSource); }catch (SQLException e){ e.printStackTrace(); } } private static DatabaseHelper instance; /* * 单例获取该Helper*/ public static synchronized DatabaseHelper getHelper(Context context) { if (instance == null){ synchronized (DatabaseHelper.class){ if (instance == null){ instance = new DatabaseHelper(context); } } } return instance; } /* * 获得userDao*/ public Dao<User, Integer> getUserDao() throws SQLException { if (userDao == null){ userDao = getDao(User.class); } return userDao; } /* * 释放资源*/ public void close(){ super.close(); userDao=null; } }
这里我们需要继承OrmLiteSqliteOpenHelper,其实就是间接继承了SQLiteOpenHelper
然后需要实现两个方法:
onCreate(SQLiteDatabase database,ConnectionSource connectionSource)
创建表,我们直接使用ORMLite提供的TableUtils.createTable(connectionSource, User.class)
;进行创建
onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion)
-
数据库的增删改查
//增加数据
public void testAddUser(){
User u1 = new User("zhy", "2B青年");
DatabaseHelper helper = DatabaseHelper.getHelper(getContext());
try{
helper.getUserDao().create(u1);
u1 = new User("zhy2", "2B青年");
helper.getUserDao().create(u1);
u1 = new User("zhy3", "2B青年");
helper.getUserDao().create(u1);
u1 = new User("zhy4", "2B青年");
helper.getUserDao().create(u1);
u1 = new User("zhy5", "2B青年");
helper.getUserDao().create(u1);
u1 = new User("zhy6", "2B青年");
helper.getUserDao().create(u1);
testList();
}catch (SQLException e){
e.printStackTrace();
}
}
//删除数据
public void testDeleteUser(){
DatabaseHelper helper = DatabaseHelper.getHelper(getContext());
try{
helper.getUserDao().deleteById(2);
}catch (SQLException e){
e.printStackTrace();
}
}
//更新数据
public void testUpdateUser(){
DatabaseHelper helper = DatabaseHelper.getHelper(getContext());
try{
User u1 = new User("zhy-android", "2B青年");
u1.setId(3);
helper.getUserDao().update(u1);
}catch (SQLException e){
e.printStackTrace();
}
}
//查询数据
public void testList(){
DatabaseHelper helper = DatabaseHelper.getHelper(getContext());
try {
User u1 = new User("zhy-android", "2B青年");
u1.setId(2);
List<User> users = helper.getUserDao().queryForAll();
Log.e("TAG", users.toString());
}catch (SQLException e){
e.printStackTrace();
}
}