version 2.0 Sqlite是一种轻量级的数据库,设计于在嵌入式设备上,占用资源少,通常在嵌入式设备上只占用几百kb
SQLiteOpenHelper 使用SQLiteDatabase需要依靠辅助类SQLiteOpenHelper来对数据库进行操作;继承该类即可 它里面的方法: OnCreate() 第一次创建数据库时执行 OnOpen() 打开数据库时调用 OnUpgrade() 需要升级数据库时调用 close() 关闭打开的数据库 构造方法: SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version); 如果要查询操作,可以通过getReadableDatabase()获取数据库进行操作 如果要修改操作,可以通过getWritableDatabase() 获取数据库进行操作
对数据库的增删改查: 需要借助ContentValues来配合进行数据的读写,ContentValues类似于Map类型的存储结构,但是只能存储基本的类型,int/double等 put(key,value); key值必须要和数据库表里面的变量名相同
Insert: SQLiteDatabase.insert(String table,String nullColumnHack,ContentValues values) 参数1 – 表名 参数2 – 使用该方法,就必须在数据库里面插入一条记录,但是有可能参数3是一个空值或者里面的数据条数为0,这样的话,在数据库中插入所有的空值是不允许的;所有有了这个值,但数据为空时,可以创建一条除了主键之外的项全为null的记录 参数3 – 存入的数据
返回,插入项目的ID,失败返回-1
Update: SQLiteDatabase.update(String table,ContentValues values,String whereClause,String[] whereArgs) 参数1 – 表名 参数2 – 更新的数据,只需要填入更新的项目即可 参数3 – 更新数据发生的条件,防注入写法,例如:”id=?” 该项为null,则更新所有行 参数4 – 参数3中问好填入的数据,如果有多个,则按顺序依次填入new String[]{“1”}
返回: 数据库表中更新的条数
Delete: SQLiteDatabase.delete(String table,String[] whereArgs) 同上,但是参数2如果为null,则删除所有行
返回:受影响的条数 即删除的条数
Query: 1. SQLiteDatabase.rawQuery(String sql,String[] selectionArgs) 参数1 – 是一个sql语句,是防注入的写法写的,里面有带?的字样 参数2 – 参数1中?号处要填入的数据
返回: Cursor,查询结果的集合,cursor自带了很多方法,可以对数据的条数查询/数据位置移动/提取数据等,普通提取数据的方法如下:
cursor.moveToFirst()
while(cursor.isAfterLast()){
Cursor.getInt(cursor.getColumnIndex("age"))
Cursor.getString(cursor.getColumnIndex("name"))
cursor.moveToNext()
}
2. query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)
这是另外一种查询,可以返回表的部分字段
参数2 -- 需要返回的表的项,null返回所有项
参数3 -- 查询条件,即where后面的数据,例如 id=?
参数4 -- 参数3中?好处填入的数据
groupBy:分组列
having:分组条件 orderBy:排序列 limit:分页查询限制
他们的区别: RawQuery()使用SQL语句进行查询;而query是android用自己的api进行查询的;而且后者相比于前者有一个好处,前者的String的SQL语句有可能单词拼写错误,而后者则不会
android事务: 事务是防止对数据库做一些操作时,突发异常如断电,导致操作只执行了一半,从而引发的数据异常 事务机制,则表明对数据库的操作要么做完,要么一步也不做
beginTransaction() 开始事务
try{ 数据库操作语句 setTransactionSuccessful() }catch(exception e){ }finally{ endTransaction() }
在begin和end之间即是对数据库操作语句,执行到end时,它回去查看事务成功标志,是否调用了settranscationSucessful(),如果成功,则事务完成,否则则进行回滚操作
除此之外,sqlitedatabase还有一些执行sql的语句,executeSQL(String sql); 纯粹的sql语句,没有防注入的写法
该方法只能执行处查询之外的一些操作 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|