public class SqliteDAO{
static final String tag="DAO";
/**
* 访问的数据库
*/
private SQLiteDatabase db;
/**
* 数据库打开辅助类
*/
private static PADoctorSQLiteHelper paDoctorSQLiteHelper;
private static long curUserId;
/**
* 数据插入冲突处理方式:
* 0-忽略
* 1-抛出异常
* 2-替换数据
*/
private int conflictType = 2;
public SqliteDAO(Context c, long userId){
if (paDoctorSQLiteHelper == null || userId != curUserId) {
curUserId = userId;
String prefix = "";
try {
prefix = c.getExternalFilesDir(null).getAbsolutePath() + "/";
} catch (Exception e) {
prefix = "";
}
paDoctorSQLiteHelper = new PADoctorSQLiteHelper(c, prefix+"u"+curUserId+".msg", null, 1);
}
db = paDoctorSQLiteHelper.getWritableDatabase();
}
public void close() {
//db.close();
}
public SQLiteDatabase getSQLiteDatabase(){
return db;
}
/**
* 插入对象到数据库, 存储对象的所有字段到数据库的对应字段,包括NULL字段.
* @param entity 待插入的对象
* @return 如果插入数据库成功则返回该对象,否则返回NULL
*/
public <T> T insert(T entity){
return insert(entity,false);
}
/**
* 插入对象到数据库, 仅存储对象的非空字段到数据库,对象的NULL字段将被忽略.
* @param entity 待插入的对象
* @return 如果插入数据库成功则返回该对象,否则返回NULL
*/
public <T> T insertSelective(T entity){
return insert(entity,true);
}
private <T> T insert(T entity,boolean selective){
ContentValues values=getContentValues(entity,selective);
// T exist_obj=this.loadByPrimaryKey(entity);
// if(exist_obj!=null){
// return exist_obj;
// }
long r;
if(conflictType == 2){
r = db.replace(getTableName(entity), null, values);
}else{
r = db.insert(getTableName(entity), null, values);
}
if(r >= 0){
return entity;
}
return null;
}
/**
* 根据主键删除数据
* @param entity 待删除的对象, 主键只必须设置.
* @return
*/
public <T> int delete(T entity){
Object[] args=getPrimarySelectionAndArgs(entity);
return db.delete(getTableName(entity), (String)args[0], (String[])args[1]);
}
/**
*
* @param entity
* @param whereClause
* @param whereArgs
* @return the number of rows affected if a whereClause is passed in, 0 otherwise.
* To remove all rows and get a count pass "1" as the whereClause.
*/
public <T> int deleteByWhereClause(T entity, String whereClause, String[] where
Sqlite 反射机制封装数据库
最新推荐文章于 2024-10-15 14:56:18 发布
这个博客详细介绍了如何在Android中利用反射和注解机制来封装SQLite数据库操作,包括插入、更新、删除和查询数据的方法,以及如何处理数据冲突。通过创建SqliteDAO类,实现了对数据库实体对象的便捷操作。
摘要由CSDN通过智能技术生成