android学习笔记--sqlite数据库
2016-02-25 15:32
447 查看
最近在通过集成环信实现即时通讯,需要匹配群中所有人(好友与非好友的头像与昵称),因为环信不负责维护这些数据,所以需要通过群id跟后台获取相应数据。获取的这份数据需要暂存在数据库中,所以重温了下sqlite的使用
SQLiteOpenHelper
SQLiteOpenHelper是一个抽象类,如果使用需要创建自己的帮助类去集成他。
使用上述方法创建数据库
数据的CURD
事物
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(); } }
相关文章推荐
- Picasso学习
- Android中RelativeLayout各个属性的含义
- 利用monkey测试android,入门级用户可能遇见的错误及解决办法
- Android Monkey Test
- android java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.pr
- Android异步消息处理机制完全解析,带你从源码的角度彻底理解
- Android四大组件应用系列——使用BroadcastReceiver和Service实现倒计时
- Android 设置静态和动态壁纸
- Android 实现通知栏显示多个notification
- Android中Butter Knife库使用
- Android中Fragment的生命周期与返回栈的管理
- android中的空指针异常NullpointExcepiton
- 编译android内核源码
- Ubuntu Android Studio 无法通过起动器开启
- Android 3D 旋转
- Android开发笔记(七十)反编译初步
- Android安全机制分析与解决方案探析
- Android - View绘图原理总结
- 一个丰富的通知工具类 NotifyUtil
- android--获取屏幕高宽度工具类