Android 使用ORMLite操作数据库

【Android 使用ORMLite操作数据库】进行安卓开发少不了要跟数据库打交道。然而谷歌为我们提供的数据库操作类SQLiteHelper生涩难懂,尤其是要求熟练SQL语句。
java是一门面向对象语言,使用面向对象的思想管理数据库无疑更加合适。
1、下载Jar包

  • 可以去官网下载core以及android Jar包
  • 也可以去我上传的地址下载
注意是俩个jar包哦
2、配置JavaBen
这里的javaben对应的就是数据库表里面的具体数据。国际惯例,先上代码:
//表名 DatabaseTable(tableName = "tb_user") public class User { /** * id列的列名 */ public static final String COLUMN_NAME_ID = "id"; //表示id @DatabaseField(id = true) private String id; @DatabaseField(useGetSet = true) private String name; @DatabaseField(columnName="age") private int mAge; @DatabaseField(defaultValue="https://www.it610.com/article/男") private String sex; public User() { }public User(String id, String name, int age) { super(); this.id = id; this.name = name; this.mAge = age; }public String getId() { return id; }public void setId(String id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public int getmAge() { return mAge; }public void setmAge(int mAge) { this.mAge = mAge; }public String getSex() { return sex; }public void setSex(String sex) { this.sex = sex; }@Override public String toString() { return "id=" + id + ", name=" + name + ", age=" + mAge + ", sex=" + sex + "\n"; } }

注意:需要一个无参构造
其中代码与普通的javaben无多大区别,主要是注解。
3、注解含义
  1. 在类的申明第一行上面加上:
    • @DatabaseTable(tableName = "tb_user")
  2. Field注释,包含以下几种字段定义 :
    • @DatabaseField
columnName
指定列名,不指定的话默认使用变量名
@DatabaseField(columnName="age") private String mAge;

defaultValue
指设置该列默认值
@DatabaseField(defaultValue="https://www.it610.com/article/男") private String sex;

id
作为数据库的id存在(id、generatedId、generatedIdSequence只能同时存在一个)
@DatabaseField(id = true) private String id;


generatedId
自增长id(id、generatedId、generatedIdSequence只能同时存在一个)

generatedId
序列编号的名字(可理解为id,但是特殊指定columnName的值)

useGetSet
是否使用get set方法进行映射,为true时表示使用get set方法,
建议设置为true,可以提升性能
@DatabaseField(useGetSet = true) private String name;

4、OrmLiteSqliteOpenHelper子类的创建
具体用法注释已经写的很清楚了,这里就不再详细说明,主要重写俩个方法
onCreate(SQLiteDatabase dataClass, ConnectionSource source)
onUpgrade(SQLiteDatabase database, ConnectionSource source, int olderVersion,
int newVersion)
public class DatabaseHelper extends OrmLiteSqliteOpenHelper { //数据库名 private static final String TABLE_NAME = "user_tab"; //版本号 private static final int TABLE_VERSION = 1; //dao操作类,每一张表对应一个 private Dao mUserDao; private DatabaseHelper(Context context) { //参数与原生的类似 super(context, TABLE_NAME, null, TABLE_VERSION); }//数据库创建时执行的方法 @Override public void onCreate(SQLiteDatabase dataClass, ConnectionSource source) { try { //创建表 TableUtils.createTable(source, User.class); } catch (SQLException e) { e.printStackTrace(); } }//版本变更执行的方法 @Override public void onUpgrade(SQLiteDatabase database, ConnectionSource source, int olderVersion, int newVersion) { try { //新增、变更、删除表操作 TableUtils.dropTable(source, User.class, true); } catch (SQLException e) { e.printStackTrace(); } }private static DatabaseHelper mDatabaseHelper; //获取单例 public static DatabaseHelper getInstance(Context context) { if (mDatabaseHelper == null ) { synchronized (DatabaseHelper.class) { if (mDatabaseHelper == null) { mDatabaseHelper = new DatabaseHelper(context); } } }return mDatabaseHelper; }public Dao getUserDao() { if (mUserDao == null) { try { mUserDao = getDao(User.class); } catch (SQLException e) { e.printStackTrace(); } }return mUserDao; }//释放资源 @Override public void close() { super.close(); mUserDao = null; mDatabaseHelper.close(); mDatabaseHelper = null; } }

5、创建数据库操作Dao类
Dao主要用于对数据库的操作,可以避免直接通过help来进行相关,实现功能拆分。这样做符合设计模式中的单一职责原则。 ORMLite的功能是非常强大的,可以让开发人员方便的进行数据库的增删查改,提高开发效率,减少开发难度。

public class UserDao { protected Dao mDao; protected DatabaseHelper mHelper; public UserDao(Context context) { getDao(context); }private void getDao(Context context) { mHelper = DatabaseHelper.getInstance(context); try { mDao = mHelper.getDao(User.class); } catch (SQLException e) { e.printStackTrace(); } }/** * 添加集合中的数据到数据库 * @date 2016-4-14 下午6:45:05 * @param list 需要插入的数据列表 */ public void add(List list) { if (list == null || list.isEmpty()) { return; }for (User item : list) { add(item); } }/** * 添加一个数据 * @date 2016-4-14 下午6:20:59 * @param item需要插入的数据 */ public void add(User item) { try { mDao.createIfNotExists(item); } catch (SQLException e) { e.printStackTrace(); } }/** * 删除所有数据 * @date 2016-4-14 下午6:42:54 */ public void deleted() { try { mDao.delete(queryAll()); } catch (SQLException e) { e.printStackTrace(); } }/** * 查询所有数据 * @author 漆可 * @date 2016-4-14 下午6:37:42 * @return */ public List queryAll() { List list = null; try { list = mDao.queryForAll(); } catch (SQLException e) { e.printStackTrace(); }return list; }/** * 根据id查询 * @date 2016-4-18 * @param areacode * @return */ public User getItemById(String id) { User areaItem = new User(); try { List list = mDao.queryBuilder().where().eq(User.COLUMN_NAME_ID, id).query(); if (list != null && !list.isEmpty()) { areaItem = list.get(0); }} catch (SQLException e) { e.printStackTrace(); }return areaItem; }public void close() { mHelper.close(); } }

6、使用
程序页面,请自动忽视美观
Android 使用ORMLite操作数据库
文章图片

Activity代码
public class MainActivity extends Activity { private UserDao mUserDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mUserDao = new UserDao(this); }/** * 添加按钮点击事件 * @author 漆可 * @date 2016-5-4 下午5:33:12 * @param v */ public void addBtn(View v) { User user = null; for (int i = 0; i < 10; i++) { user = new User(i+"", "张三", i+10); mUserDao.add(user); } }/** * 查询按钮点击事件 * @author 漆可 * @date 2016-5-4 下午5:33:24 * @param v * @throws SQLException */ public void queryBtn(View v) throws SQLException { List users = mUserDao.queryAll(); Log.d("users", users.toString()); } }

布局就不不贴了,就是俩个按钮,一个添加数据,一个查询数据。文章最后提供了demo下载地址。其中添加按钮点击后添加10条数据,查询按钮查询表中所有数据。
下面是log日志,当第一次添加数据时,会自动创建一张表:
Android 使用ORMLite操作数据库
文章图片

下面是查询结果
Android 使用ORMLite操作数据库
文章图片

好了,整个demo其实很简单,使用ORMLite 进行数据库操作的流程如上文所述。
demo下载地址:http://download.csdn.net/detail/q649381130/9510098

    推荐阅读