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类
SQLiteOpenHelper类
原生的数据库操作,都需要继承SQLiteOpenHelper,而ormlite我们则需要继承OrmLiteSqliteOpenHelper
DatabaseUtil
编写Dao类
我们可以将需要的增、删、改、查等方法都放在Dao里,便于操作使用
代码
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; } } }
代码
相关文章推荐
- android 数据库操作使用ormlite框架1
- 【android】ORMLite框架 的使用方法---给你的数据库操作插上翅膀
- 【Android】在Android上使用OrmLite数据库框架 之 基本用法
- Android快速开发--使用ORMLite操作数据库
- 【Android】在Android上使用OrmLite数据库框架 之 使用表配置文件
- Android 使用ORMLite 操作数据库
- Android ORM数据库之OrmLite使用框架及源码分析
- Android 数据库框架OrmLite的使用(一)
- Android 使用ORMLite操作数据库
- android数据库框架ormlite的使用
- 【Android】在Android上使用OrmLite数据库框架 之 使用表配置文件
- Android 使用ORMLite 操作数据库
- Android 使用ORMLite 操作数据库
- 在android中使用OrmLite数据库框架
- Android 数据库框架ormlite 使用精要
- Android 数据库框架OrmLite的使用(二)
- 【转】Android 使用ORMLite 操作数据库
- Android 使用ORMLite 操作数据库
- Android使用OrmLite数据库框架 之 使用表配置文件
- Android 数据库框架ormlite 使用精要