android学习笔记--sqlite数据库

最近在通过集成环信实现即时通讯,需要匹配群中所有人(好友与非好友的头像与昵称),因为环信不负责维护这些数据,所以需要通过群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();
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值