前段時間學習了GreenDao,對比了下,ORMLite更加的簡單一些.參考其他的博文 SQLite數據庫框架ORMLite與GreenDao的簡單比較 GreenDao和ORMLite使用的頻率比較高,但是GreenDao的效率更加的高一些.
本篇文章就針對ORMLite的使用做一個簡單點的介紹
1.從官網下載core庫jar包,android上的jar包
下載成功後複製進libs文件夾,同步工程
2.創建一個java類,通過註解,將此java對象和數據庫中的表格關聯起來
@DatabaseTable(tableName = "user")
public class User {
public User() {
}
public User(int id, String name, String age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "age")
private String age;
@DatabaseField(columnName = "address")
private String address;
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 getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
- @DatabaseTable(tableName = “user”) : 代表User類映射到數據庫當中的user表(table)
- DatabaseField()的”( )”中可以有以下的值
@DatabaseField(generatedId = true) : 代表主鍵自動增長
@DatabaseField(id= true) : 代表此字段是主鍵
@DatabaseField(columnName = “name”) : 代表此字段對應於數據當中的name
還有更多 : 請參考 ORMLite註解
3.創建一個DatabaseHelper類,繼承自OrmLiteSqliteOpenHelper,用來管理數據庫的創建和更新,還可以通過此類獲取數據庫的操作對象
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DB_NAME = "ormtest.db";
private static final int DB_VERSION = 1;
private Dao<User, Integer> userDao;
private DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
private static volatile DatabaseHelper mInstance;
/**
* 單例模式,獲取DatabaseHelper的唯一實例
*
* @param context
* @return
*/
public static DatabaseHelper getInstance(Context context) {
if (mInstance == null) {
synchronized (DatabaseHelper.class) {
if (mInstance == null) {
mInstance = new DatabaseHelper(context);
}
}
}
return mInstance;
}
/**
* 如果還沒有這個數據庫的時候就會創建數據庫,同時創建表格
*
* @param sqLiteDatabase
* @param connectionSource
*/
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
//創建表
TableUtils.createTable(connectionSource, User.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 升級數據庫
*
* @param sqLiteDatabase
* @param connectionSource
* @param i
* @param i1
*/
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
try {
TableUtils.dropTable(connectionSource, User.class, true);
onCreate(sqLiteDatabase, connectionSource);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 釋放資源
*/
@Override
public void close() {
super.close();
userDao = null;
}
}
4.在上面的DatabaseHelper創建完成以後,此時我們直接可以獲取到XXDao的對象,就可以進行增(create)刪(delete)改(update)查(query)了
DatabaseHelper helper = DatabaseHelper.getInstance(this);
try {
Dao<User, Integer> dao = helper.getDao(User.class);
dao.delete(new User());//刪除一條數據
} catch (SQLException e) {
e.printStackTrace();
}
但是這裏建議真毒每一張table封裝一個dao,這樣一個dao只映射數據庫當中的一張表格,例如這裏封裝了一個UserDao,裏面包含了基本的增、刪、改、查的方法:
public class UserDao {
private DatabaseHelper mHelper;
private Dao<User, Integer> mDao;
private static volatile UserDao mUserDao;
private UserDao(Context context) {
if (mDao == null) {
if (mHelper == null) {
mHelper = DatabaseHelper.getInstance(context);
}
try {
mDao = mHelper.getDao(User.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static UserDao getInstance(Context context) {
if (mUserDao == null) {
synchronized (UserDao.class) {
if (mUserDao == null) {
mUserDao = new UserDao(context);
}
}
}
return mUserDao;
}
/**
* Create a new row in the database from an object
* 創建一條新的記錄到數據庫中
*
* @param user
* @return 是否插入成功
*/
public boolean insert(User user) {
boolean flag = false;
try {
//插入或者更新的行數,單條插入成功就是1
int i = mDao.create(user);
flag = i == 1 ? true : false;
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
/**
* 批量插入數據
*
* @param user
* @return 是否插入成功
*/
public boolean insertAll(List<User> user) {
boolean flag = false;
try {
//插入或者更新的行數,單條插入成功就是1
int i = mDao.create(user);
flag = i == 1 ? true : false;
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
/**
* 刪除一條數據
*
* @param user
* @return
*/
public boolean delete(User user) {
boolean flag = false;
try {
int rowCount = mDao.delete(user);
flag = rowCount == 1 ? true : false;
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
/**
* 批量刪除
*
* @param users
* @return
*/
public boolean deleteAll(List<User> users) {
boolean flag = false;
try {
int rowCount = mDao.delete(users);
flag = rowCount == 1 ? true : false;
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
/**
* 更新數據
*
* @param user
* @return
*/
public boolean update(User user) {
boolean flag = false;
try {
int rowCount = mDao.update(user);
flag = rowCount == 1 ? true : false;
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
/**
* 批量更新
*
* @param users
* @return
*/
public boolean updateAll(List<User> users) {
boolean flag = true;
try {
for (User user : users) {
int rowCount = mDao.update(user);
boolean b = rowCount == 1 ? true : false;
if (!b) {
flag = false;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
public void query() {
QueryBuilder<User, Integer> builder = mDao.queryBuilder();
Where<User, Integer> where = builder.where();
try {
//相當於:select * from user where name = '張三' and age > 20
where.and(where.eq("name","張三"),where.ge("age",20));
//下面這條語句相當於:select * from user where (name = '張三' and age > 20 ) or address = '陝西'
where.and(where.eq("name","張三"),where.ge("age",20)).or().eq("address","陝西");
List<User> users = where.query();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
請參考ORMLite官方參考文檔
ORMLite官網
ORMLite官方doc文檔