添加依赖
compile 'com.j256.ormlite:ormlite-android:4.48'
compile 'com.google.code.gson:gson:2.8.2'
创建实体类
@DatabaseTable(tableName = "tb_user")
public class User implements Parcelable {
@DatabaseField(generatedId = true)
private int id;
@DatabaseField
private String customId;//客户ID
@DatabaseField(columnName="businessId")
@SerializedName(value="id", alternate = {"docid","docId"})
private String businessId;//经纪人ID
@DatabaseField(columnName="customName", dataType=DataType.SERIALZABLE)
@SerializedName(value="customName", alternate={"name","Name"})
private ArrayList<String> customNames;//客户姓名
...
}
说明一下
- 通过GSON注解@SerializedName(value="xxx"),支持Gson序列化;
- 通过 @DatabaseTable(tableName = "tb_user")指定表名;
- 通过 @DatabaseFiled(generatedId = true)指定某字段自动生成;
- 对于ArrayList序列化对象的支持,需要使用 dataType=DataType.SERIALIZABLE 控制数据库表中字段类型;
继承 OrmLiteSqliteOpenHelper 类
public class DBHelper extends OrmLiteSqliteOpenHelper {
private Map<String, Dao> daos = new HashMap<>();
private Dao<User, Integer> userDao = null;
private static final String DATABASE_NAME = "users.db";
private static final int DATABASE_VERSION = 1;
public DBHelper(Context context) {
this(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public DBHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {
super(context, databaseName, factory, databaseVersion);
}
//数据库的创建
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, User.class);
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
//版本更新
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
TableUtils.dropTable(connectionSource, User.class, true);
onCreate(sqLiteDatabase, connectionSource);
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
@Override
public ConnectionSource getConnectionSource() {
return super.getConnectionSource();
}
@Override
public void close() {
super.close();
for (String key : daos.keySet()) {
Dao dao = daos.get(key);
dao = null;
}
}
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) {
try {
dao = super.getDao(clazz);
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
daos.put(className, dao);
}
return dao;
}
private static DBHelper instance;
/**
* 单例获取Helper
*
* @param context
* @return
*/
public static synchronized DBHelper getHelper(Context context) {
context = context.getApplicationContext();
if (instance == null) {
synchronized (DBHelper.class) {
if (instance == null)
instance = new DBHelper(context);
}
}
return instance;
}
}
- 数据库第一次创建:
onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) - 数据库版本更新:
onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion)
可以看到 User 就是我们的实体类,通过
TableUtils.createTable(connectionSource, User.class),在 onCreate 中完成了对象表的创建。
ORMLite 还提供了 DAO 类,每一个实体对象,都对应着一个 DAO 类,OrmLiteSqliteOpenHelper 类为我们提供了 getDao() ;
在 DAO 中完成增删改查
public class UserBeanDao {
private static final String TAG = "UserBeanDao";
private Context context;
private Dao<User, Integer> userDao;
private DatabaseHelper helper;
public UserBeanDao(Context context) {
this.context = context;
try {
helper = DatabaseHelper.getHelper(context);
userDao = helper.getDao(User.class);
} catch (SQLiteException e) {
e.printStackTrace();
}
}
/**
* 增加一个记录
*
* @param user
*/
public void add(User user) {
try {
userDao.create(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 跟新一个记录
*
* @param user
*/
public void update(User user) {
try {
userDao.update(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 获取数据库中最新的版本
*
* @return
*/
public User getLastOne() {
try {
List<User> users = userDao.queryBuilder().orderBy("id", false).query();
if (users != null && users.size() > 0) {
return users.get(0);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 根据订单ID查
*
* @return
*/
public User getUserByOderId(String orderId) {
try {
List<User> users = userDao.queryBuilder().where().eq("orderId", orderId).and()
.eq("flag", 0).query();
if (users != null && users.size() > 0) {
return users.get(0);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 根据用户ID和经纪人ID查记录
*
* @return
*/
public User getUser(String customID, String businessId) {
try {
List<User> users = userDao.queryBuilder().where().eq("customId", customID).and().eq
("businessId", businessId).query();
if (users != null && users.size() > 0) {
return users.get(0);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 根据经济人ID查询所有的为上传的订单
*
* @return
*/
public List<User> getUser(String businessId) {
try {
List<User> users = userDao.queryBuilder().where().eq("businessId", businessId).and()
.eq("flag", 0).query();
if (users != null && users.size() > 0) {
return users;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取数据库中所有版本信息
*
* @return
*/
public User getFistOne() {
try {
List<User> users = userDao.queryBuilder().orderBy("id", true).query();
if (users != null && users.size() > 0) {
return users.get(0);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}