使用原始的SQLiteHelper来操作维护数据库有点过于繁琐,重复工作量较大。所以会想到使用一个比较方便的ORM来维护我们本地的数据库,各位业界前辈都给我推荐了ORMLite(官网:http://ormlite.com/),以其小巧方便,在Android数据库维护上深受大家的喜爱。
但是ORMLite的文档有比较少,官方老外写的文档又长又乱,我等考不过托福雅思的我也就简单的看了看。把自己写了一个demo,记录一下使用的过程和步骤。
Jar 包的下载地址在:Orm jar包的下载地址
我们需要下载 core 和 android 两个jar,放在工程中就好
一、设置建立自己的与数据库表对应的pojo
-
-
-
-
-
- package com.stchou.helloormlite;
-
- import com.j256.ormlite.field.DatabaseField;
- import com.j256.ormlite.table.DatabaseTable;
-
-
-
-
-
-
-
- @DatabaseTable(tableName = "user")
- public class User
- {
-
- @DatabaseField(generatedId = true)
- private int id;
-
- @DatabaseField(canBeNull = false)
- private String username;
-
- @DatabaseField(canBeNull = false)
- private String password;
-
- @DatabaseField(defaultValue = "")
- private String nickname ;
-
- public User()
- {
-
- }
-
-
-
-
- public int getId()
- {
- return this.id;
- }
-
-
-
-
- public void setId(int id)
- {
- this.id = id;
- }
-
-
-
-
- public String getUsername()
- {
- return this.username;
- }
-
-
-
-
- public void setUsername(String username)
- {
- this.username = username;
- }
-
-
-
-
- public String getPassword()
- {
- return this.password;
- }
-
-
-
-
- public void setPassword(String password)
- {
- this.password = password;
- }
-
-
- @Override
- public String toString()
- {
- String text = "";
-
- text += "\nid = " + id;
- text += "\nusername = " + username;
- text += "\npassword = " + password;
- return text;
- }
-
- }
@DatabaseField 可以注释一下成员
columnName | String | 数据库表中对应的列名称,如果没有设置,系统将自动生成 |
dataType | | 字段的数据类型。通常情况下,数据类型是从Java类的成员变量获取的,并不需要进行特殊指出。它相当于是SQL的数据类型。 |
defaultValue | String | 当心插入一条数据时候的默认值,如果没有将为none |
width | Integer | 字段的宽度,主要用于字符串字段。默认是0,意味着采用默认的数据类型和具体的数据库的默认情况。对于字符串以为在255个字符即使有些数据库并不支持。 |
canBeNull | Boolean | 默认值为true,如果设置为false,insert数据是必须保证该列项必须存在一个值。 |
id | Boolean | 不管这个字段是否是id,默认值都是false。作为数据库中的主键存在一个类中。id、generatedId和generatedIdSequence三者只能同时出现一个 |
generatedId | Boolean | 自增长id,默认值为false。调用Dao.create()时候会增加1。id、generatedId和generatedIdSequence三者只能同时出现一个。 |
generatedIdSequence | String | 序列编号的名字,这个值在生成的时候会被使用。和generatedId相似,但是你能够指定使用的序列名称。默认是没有的。一个class中只有一个成员变量可以设置这个值。这仅仅在数据库需要序列生成id时才需要它。如果你选择使用generatedId代替它,那么代码将自动增加序列名。 |
foreign | Boolean | 默认值为false,相当于数据库中的外键,链接其他类存储在数据库中。这个字段必须存在自己的原始类型,另一个类必须存在一个id字段(id、generatedid、generatedIdSequence中的一个) |
useGetSet | Boolean | 申明这个字段可以使用Java类中的get、set映射到数据库表中的赋值和获取。默认值为false |
…. | | |
二、新建一个OpenHelper继承OrmLiteSqliteOpenHelper这个类。
1、 这类创建和扩展必须实现
onCreate(SQLiteDatabase db,ConnectionSource connectionSource)
onUpgrade(SQLiteDatabase db,ConnectionSource connectionSource, int oldVersion, int newVersion)
两个方法
2、 初始化DAO。
Dao<T,V>
包含两个泛型,第一个泛型表DAO操作的类,第二个表示操作类的主键类型
当然,ORMLite很有趣的是它存在一个RuntimeExceptionDao这个东西是针对JDBC和一些其他的SQL的。对于Android平台主要是处理了过多繁琐的try…catch…的书写,和一些语法错误带来的崩溃,建议使用。
-
-
-
-
-
- package com.stchou.helloormlite;
-
- import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
- import com.j256.ormlite.dao.Dao;
- import com.j256.ormlite.dao.RuntimeExceptionDao;
- import com.j256.ormlite.support.ConnectionSource;
- import com.j256.ormlite.table.TableUtils;
-
- import android.content.Context;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteDatabase.CursorFactory;
- import android.util.Log;
-
- import java.sql.SQLException;
-
- public class DatabaseHelper extends OrmLiteSqliteOpenHelper
- {
- private static final String TAG = "DatabaseHelper";
-
- private static final String DATABASE_NAME = "HelloOrmlite.db";
-
- private static final int DATABASE_VERSION = 1;
-
- private Dao<User, Integer> userDao = null;
- private RuntimeExceptionDao<User, Integer> userRuntimeDao = null;
-
- public DatabaseHelper(Context context)
- {
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
-
-
- }
-
-
-
-
-
-
-
- public DatabaseHelper(Context context, String databaseName, CursorFactory factory, int databaseVersion)
- {
- super(context, databaseName, factory, databaseVersion);
- }
-
- @Override
- public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource)
- {
- try
- {
-
- TableUtils.createTable(connectionSource, User.class);
-
- userDao = getUserDao();
- userRuntimeDao = getUserDataDao();
- }
- catch (SQLException e)
- {
- Log.e(TAG, e.toString());
- e.printStackTrace();
- }
-
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion)
- {
- try
- {
- TableUtils.dropTable(connectionSource, User.class, true);
- }
- catch (SQLException e)
- {
- Log.e(TAG, e.toString());
- e.printStackTrace();
- }
- }
-
-
-
-
-
- private Dao<User, Integer> getUserDao() throws SQLException
- {
- if (userDao == null)
- userDao = getDao(User.class);
- return userDao;
- }
-
- public RuntimeExceptionDao<User, Integer> getUserDataDao()
- {
- if (userRuntimeDao == null)
- {
- userRuntimeDao = getRuntimeExceptionDao(User.class);
- }
- return userRuntimeDao;
- }
-
-
-
-
- @Override
- public void close() {
- super.close();
- userRuntimeDao = null;
- }
-
- }
三、将使用的Activity继承 OrmLiteBaseActivity,针对维护的数据,进行增删查改。
只需要使用DAO调用相应的CURD方法就好了,名称命名很好,灰常简单,不做过多讲解,看一次代码就知道了
当然很多情况下我们无法直接继承:
我们就可以这样来获取Helper
- private DataHelper databaseHelper = null;
- public DataHelper getHelper() {
- if (databaseHelper == null) {
- databaseHelper = OpenHelperManager
- .getHelper(this, DatabaseHelper.class);
- }
- return databaseHelper;
- }
带上两个附件:
整个Android demo的打包 :点击打开链接
官方ORMLite说明手册:点击打开链接