sqlite学习

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 whereClause, 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"));            //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语句,没有防注入的写法
该方法只能执行处查询之外的一些操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气好男人_Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值