项目一直在使用OrmLite框架,用了这么久,终于有时间做下总结,顺便记录下,方便以后使用
首先说下DataBaseHelper的创建
public class DataBaseHelper extends OrmLiteSqliteOpenHelper {
private Dao<UserVO, Integer> mUserDao = null;
public DataBaseHelper (Context context) {
super(context, test, null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
// TODO Auto-generated method stub
try {
//创建数据表
TableUtils.createTableIfNotExists(arg1, UserVO.class);
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
public Dao<person, integer=""> getPersonDao() throws java.sql.SQLException {
if (mUserDao == null) {
mUserDao = getDao(UserVO.class);
}
return mUserDao;
}
}
**这里就不列出UserVO类了
Dao是一个很重要的类, 这些Dao对象用于以后的数据库操作,其包含两个泛型,第一个泛型表DAO操作的类,第二个是标记数据表的ID。**
用到数据库,那么一定会涉及到SD卡上的数据库访问
/**
* 用于支持对存储在SD卡上的数据库的访问
**/
public class DatabaseContext extends ContextWrapper {
/**
* 构造函数
*
* @param base
* 上下文环境
*/
public DatabaseContext(Context base) {
super(base);
}
/**
* 获得数据库路径,如果不存在,则创建对象对象
*
* @param name
* @param mode
* @param factory
*/
@Override
public File getDatabasePath(String name) {
/*
* // 判断是否存在sd卡 boolean sdExist = Environment.MEDIA_MOUNTED
* .equals(Environment.getExternalStorageState()); if (!sdExist) {//
* 如果不存在, Log.e("SD卡管理:", "SD卡不存在,请加载SD卡"); return null; } else {
*/
String dbDir = AppContext.getAppContext().getdbPath() + name;// 数据库路径
File dbFile = new File(dbDir);
return dbFile;
}
/**
* 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
*
* @param name
* @param mode
* @param factory
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode,
SQLiteDatabase.CursorFactory factory) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
getDatabasePath(name), null);
return result;
}
/**
* Android 4.0会调用此方法获取数据库。
*
* @see android.content.ContextWrapper#openOrCreateDatabase(java.lang.String,
* int, android.database.sqlite.SQLiteDatabase.CursorFactory,
* android.database.DatabaseErrorHandler)
* @param name
* @param mode
* @param factory
* @param errorHandler
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode,
CursorFactory factory, DatabaseErrorHandler errorHandler) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(
getDatabasePath(name), null);
return result;
}
}
创建了我们自己的数据库之后就可以来,对数据库操作了,接下来我们看看如何进行数据库的增删查改
**增加
这些方法使用起来都比较简单,我们只需将自己的Bean传入到下列方法中即可**
create:插入一条数据
createIfNotExists:如果不存在则插入
createOrUpdate:如果存在则更新
查询
一般查询操作比例都会占很大
1.多字段条件按照顺序查询:
List<UserVo> list = null;
try {
QueryBuilder builder = dao.queryBuilder();
builder.where().eq(字段名1,条件1).and.eq(字段名2,条件2);
builder.orderBy(DbConst.TdPdaJjTable.COLUMN_OPRTIME, false);
list = mUserDao .query(builder.prepare());
} catch (SQLException e) {
e.printStackTrace();
}
2.分页查询
QueryBuilder<person, integer=""> builder = dao.queryBuilder();
builder.offset(10);//表示查询的起始位置
builder.limit(10);//表示总共获取的对象数量
builder.query();
删除和更新
与查询操作基本相同,ORMLite同样为我们提供了一系列的方法,同时也提供了复杂删除,复杂更改的DeleteBuilder和UpdateBuilder,其用法与QueryBuilder相似,就不详细介绍了。
SQL语句的使用
// 查询
Cursor cursor1 = db.rawQuery(sql, null);
// 执行SQL语句,可以执行删除,更新,等等
db.execSql(sql, null);
// 删除某时间点之前的数据
try {
String sql = "delete from table where SendTime < " + "'" + dateTime + "'";
db.execSQL(sql);
} catch (Exception e) {
e.printStackTrace();
Log.e("~~~~~~~", e.getMessage());
}