您的位置:首页 > 移动开发 > Android开发

Android中数据库操作框架Ormlite介绍与使用

2018-02-06 13:55 721 查看
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;
}
}
}


代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: