ormlite是Java平台的一个ORM框架,支持JDBC链接,Spring和Android平台,在Android中使用包含两部分。简述: 优点: 1.轻量级;2.使用简单,易上手;3.封装完善;4.文档全面。缺点:1.基于反射,效率较低(本人还没有觉得效率低);2.缺少中文翻译文档
- ormlite-core:核心模块,无论在哪个平台使用,都必须基于这个核心库,是实现ORM映射的关键模块。
- ormlite-android:基于ormlite-core封装的针对Android平台的适配模块,Android开发中主要跟这个模块打交道。
定义Bean类
@DatabaseTable(tableName = "user")
public class User {
@DatabaseField(useGetSet=true, columnName = "userName")
private String userName;
//generatedId定义主键自增长,columnName定义该字段在数据库中的列名
@DatabaseField(useGetSet=true,generatedId=true,columnName="id")
private int userId;
@DatabaseField(useGetSet=true, columnName = "age")
private int age;
@DatabaseField(useGetSet=true, columnName = "addr")
private String addr;
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", userId=" + userId +
", age=" + age +
", addr='" + addr + '\'' +
'}';
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
SQLiteOpenHelper类
原生的数据库操作,都需要继承SQLiteOpenHelper,而ormlite我们则需要继承OrmLiteSqliteOpenHelper
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String TABLE_NAME = "ormlite.db";//默认是在data/data/包名/databases/路径下
private static final int DB_VERSION = 1;
private Map<String, Dao> daos = new HashMap<String, Dao>();
private DatabaseHelper(Context context) {
super(context, context.getFilesDir().getAbsolutePath()+TABLE_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
TableUtils.createTableIfNotExists(connectionSource, User.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database,
ConnectionSource connectionSource, int oldVersion, int newVersion) {
//整表删除创建
// TableUtils.dropTable();
onCreate(database, connectionSource);
/* //更新数据库时只需添加新增字段
if (newVersion == 3) {
//数据库、表名、列名、类型
DatabaseUtil.updateColumn(database, "", "", "VARCHAR", null);
}*/
}
private static DatabaseHelper instance;
/**
* 单例获取该Helper
*
* @param context
* @return
*/
public static synchronized DatabaseHelper getHelper(Context context) {
context = context.getApplicationContext();
if (instance == null) {
synchronized (DatabaseHelper.class) {
if (instance == null)
instance = new DatabaseHelper(context);
}
}
return instance;
}
public synchronized Dao getDao(Class clazz) throws SQLException {
Dao dao = null;
String className = clazz.getSimpleName();
if (daos.containsKey(className)) {
dao = daos.get(className);
}
if (dao == null) {
dao = super.getDao(clazz);
daos.put(className, dao);
}
return dao;
}
/**
* 释放资源
*/
@Override
public void close() {
super.close();
for (String key : daos.keySet()) {
Dao dao = daos.get(key);
dao = null;
}
}
}
DatabaseUtil
public class DatabaseUtil {
public static void updateColumn(SQLiteDatabase db, String tableName,
String columnName, String columnType, Object defaultField) {
try {
if (db != null) {
Cursor c = db.rawQuery("SELECT * from " + tableName
+ " limit 1 ", null);
boolean flag = false;
if (c != null) {
for (int i = 0; i < c.getColumnCount(); i++) {
if (columnName.equalsIgnoreCase(c.getColumnName(i))) {
flag = true;
break;
}
}
if (flag == false) {
String sql = "alter table " + tableName + " add "
+ columnName + " " + columnType + " default "
+ defaultField;
db.execSQL(sql);
}
c.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void deleteRecordsWithoutForeignKey(SQLiteDatabase db, String tableName){
if (db != null) {
String sql = "DELETE from " + tableName;
db.execSQL(sql);
}
}
}
编写Dao类
我们可以将需要的增、删、改、查等方法都放在Dao里,便于操作使用
public class DBDao {
private Dao<User, Integer> userDao;
private DatabaseHelper helper;
public DBDao(Context contex) {
try {
helper = DatabaseHelper.getHelper(contex);
userDao = helper.getDao(User.class);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 增
* @param
*/
public void addUser(User user) {
try {
userDao.create(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 删(通过实体)
* @param
*/
public void delUser(User user) {
try {
userDao.delete(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 删(通过id)
* @param id
*/
public void delUserById(Integer id) {
try {
userDao.deleteById(id);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 改
* @param user
*/
public void updateUser(User user) {
try {
userDao.update(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 查
* @return
*/
public List<User> queryAllUser() {
ArrayList<User> users = null;
try {
users = (ArrayList<User>) userDao.queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}
return users;
}
/**
* 获取user
* @param id user编号
* @return
*/
public User getUser(Integer id) {
try {
//父母信息为空
return userDao.queryForId(id);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
}