您的位置:首页 > 移动开发 > Android开发

android学习笔记--sqlite数据库

2016-02-25 15:32 447 查看
最近在通过集成环信实现即时通讯,需要匹配群中所有人(好友与非好友的头像与昵称),因为环信不负责维护这些数据,所以需要通过群id跟后台获取相应数据。获取的这份数据需要暂存在数据库中,所以重温了下sqlite的使用

SQLiteOpenHelper

SQLiteOpenHelper是一个抽象类,如果使用需要创建自己的帮助类去集成他。

/**
* 常用的构造方法
* @param context 用来打开或创建数据库的上下文
* @param name 数据库文件名
* @param factory 用来创建cursor,如果null使用默认
* @param version  数据库版本
**/
public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {
this(context, name, factory, version, null);
}


/**
* 创建或打开可写入权限的数据库,但当数据不可写入时,会出现异常
**/
public SQLiteDatabase getWritableDatabase() {
synchronized (this) {
return getDatabaseLocked(true);
}
}


/**
* 创建或打开可读取的数据库
**/
public SQLiteDatabase getReadableDatabase() {
synchronized (this) {
return getDatabaseLocked(false);
}
}


/**
* 执行创建逻辑
**/
public abstract void onCreate(SQLiteDatabase db);


/**
* 执行更新逻辑
**/
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);


使用上述方法创建数据库

public class MyDBHelper extends SQLiteOpenHelper{

public static final String CREATE_TABLE = "";

private Context mContext;

public MyDBHelper(Context context,String name,CursorFactory factory,int version){
super(context,name,factory,version);
this.mContext = context;
}

@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(CREATE_TABLE);
}

@Override
public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){

}
}


MyDBHelper dbHelper = new MyDBHelper(context,"demo.db",null,1);

SQLiteDatabase db = dbHelper.getWritableDatabase();


数据的CURD

/**
* 插入数据
* @param table 表名
* @param nullColumnHack 可以为null
* @param values 插入的数据
**/
public long insert(String table, String nullColumnHack, ContentValues values) {
try {
return insertWithOnConflict(table, nullColumnHack, values, CONFLICT_NONE);
} catch (SQLException e) {
Log.e(TAG, "Error inserting " + values, e);
return -1;
}
}


//例如
ContentValues values = new ContentValues();
values.put("table row name1","");
values.put("table row name2","");
db.insert("table name",null,values);


/**
* 插入数据
* @param table 表名
* @param values 更新的数据
* @param whereClause 匹配的where条件
* @param whereArgs where条件的参数
**/
public int update(String table, ContentValues values, String whereClause, String[] whereArgs) {
return updateWithOnConflict(table, values, whereClause, whereArgs, CONFLICT_NONE);
}


//例如 将table name表中 所有row name = 1 的数据的table row //name 的值更新为 value
ContentValues values = new ContentValues();
values.put("table row name", "value");
db.update("table name",values,"row name = ?",new String[]{"1"});


/**
* 删除数据
* @param table 表名
* @param whereClause 条件
* @param whereArgs 匹配条件的值
**/
public int delete(String table, String whereClause, String[] whereArgs) {
acquireReference();
try {
SQLiteStatement statement =  new SQLiteStatement(this, "DELETE FROM " + table +
(!TextUtils.isEmpty(whereClause) ? " WHERE " + whereClause : ""), whereArgs);
try {
return statement.executeUpdateDelete();
} finally {
statement.close();
}
} finally {
releaseReference();
}
}


//例如 删除 table name表中 row name > 1的数据
db.delete("table name","row name > ?",new String[]{"1"});


/**
* 查询数据库
* @param table 查询的表名
* @param columns 返回的列集合,如果是null,则返回所有列
* @param selection 查询的约束条件,例:row name > ?
* @param selectionArgs 为约束条件中的占位符提供值
* @param groupBy 指定需要排序的列
* @param having 对排序过的结果进一步约束
* @param orderBy 指定查询结构的排序方式
**/
public Cursor query(String table, String[] columns,               String selection,String[] selectionArgs, String groupBy, String having,String orderBy) {

return query(false, table, columns, selection, selectionArgs, groupBy,
having, orderBy, null /* limit */);
}


//查询table name中的所有数据
Cursor cursor = db.query("table name",null,null,null,null,null,null);


事物

//开启事物
public void beginTransaction() {
beginTransaction(null /* transactionStatusCallback */, true);
}


//标记当前事物成功
public void setTransactionSuccessful() {
acquireReference();
try {
getThreadSession().setTransactionSuccessful();
} finally {
releaseReference();
}
}


//关闭事物 finally中必须执行关闭事物操作
public void endTransaction() {
acquireReference();
try {
getThreadSession().endTransaction(null);
} finally {
releaseReference();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: