android学习笔记--sqlite数据库

来源:互联网 发布:陕西大数据集团胡刚 编辑:程序博客网 时间:2024/05/02 05:36

最近在通过集成环信实现即时通讯,需要匹配群中所有人(好友与非好友的头像与昵称),因为环信不负责维护这些数据,所以需要通过群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 的值更新为 valueContentValues 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();        }    }
0 0