SQLite数据库

来源:互联网 发布:云流量软件 编辑:程序博客网 时间:2024/05/16 14:14

简单数据库操作

  • 查询
    • 查询全部:select * from 表名
    • 查询一个条件:select * from 表名 where 条件
    • 查询多个条件:select * from 表名 where 条件 and 条件……
    • 查询指定字段:select 字段,字段…… from 表名
    • 查询指定字段并以别名显示:select 字段 as 别名 from 表名
    • 查询并且某个字段倒叙:select * from 表名 order by 字段 排序方式
      • 注:排序方式为DESC是倒序,ASC是正序
    • 查询并且只取前N个:select 字段 from 表名 limit N
    • 查询指定区间数据:select 字段 from 表名 limit M,N,其中M是偏移量,N是查询数目
      • 实现分页查询:第几页数据=limit (页数-1)*页面数据个数,页面数据个数
    • 查询后N个数据:select * from 表名 order by 字段 排序方式 limit N
    • 条件为或者:select * from 表名 where 条件 or 条件
  • 增加
    • 插入数据:insert into 表名 (字段,字段……) values (数据,数据)
  • 修改
    • 修改数据:update 表名 set 字段=数据,字段=数据…… where 条件
  • 删除
    • 删除数据:delete from 表名 where 条件

Android中数据库操作方法

  • SQLiteDatabase,它是在Android中唯一一个操作数据库的类!
  • 如何打开一个已经存在的数据库
    • SQLiteDatabase openDatabase (String path,SQLiteDatabase.CursorFactory factory,int flags)
  • SQLiteDatabase具体的CRUD语句
    • 少参,CRUD语句(使用Sqlite语句操作)
      • 查询方法(有返回值)
        • db.rawQuery();
        • 返回值为Cursor对象
      • 删填改方法(没有返回值)
        • db.execSQL(String SQL ,new Object []{});
      • db.execSQL和db.rawQuery相同点和不同点:
        • 相同点:
          • 都是SQLiteDataBase的方法
          • 他们是少参的的方法
          • 都执行的是SQLite语句
        • 不同点:
          • rawQuery有返回值,而execSQL没有返回值
          • 占位符不同,rawQuery是new String [],而execSQL是new Object []
          • 作用范围不同,rawQuery只作用于查询语句,而execSQL作用于增删改语句
    • 多参,CRUD语句(集成方法拼接条件,可以防止注入攻击)
      • 查询
        • db.query(参数1,参数2,参数3,参数4,参数5,参数6,参数7)
        • /*
          *参数1: 表名
          *参数2: 要查询的列名 new String []{} 如果填null 代表全查
          *参数3: 查询条件 不需要写关键字 如果是两个条件或者更多需要自己用 and拼接
          *参数4: 条件的占位符 new String []{}
          *参数5:分组 null代表不分
          *参数6: null
          *参数7: 排序 order by [xxxx]
          */
      • 添加
        • insert(参数1,参数2,参数3);
        • /*
          *参数1: 表名 要添加数据的表名
          *参数2:是否添加空字段 null
          *参数3:要添加的值 列名
          */
      • 删除
        • int rowCount = db.delete(参数1,参数2,参数3);
        • /*
          *参数1: 表名
          *参数2: 条件
          *参数3: 占位符 new String []{}
          *返回值 int 删除了多少行
          */
      • 修改
        • int rowCount = db.update(参数1,参数2,参数3,参数4);
        • /*
          *参数1: 表名
          *参数2: 更新的值 ContentValues key更新的字段 values更新的值
          *参数3: 条件
          *参数4: 占位符
          *返回值: 修改的行数
          */
  • 新创建一个数据库(SQLiteOpenHelper)
    • 创建一个类继承 SQLiteOpenHelper
    • 重写三个方法
      • 构造方法(创建数据库)
      • onCreate(创建表)
      • onUpgrade(版本更新,如果修改字段,要第一时间修改版本号)
    • 在要创建数据库的类中调用帮助类
    • 调用帮助类的方法会返回SQLiteDataBase,在调用这两个方法的时候 才会进行数据库创建工作!
      • SQLiteOpenHelper.getReadableDatabase()
      • SQLiteOpenHelper.getWritableDatabase()
      • 两个方法的相同点:
        • 两个方法都得到SQLiteDataBase对象,都可以对数据库进行读写操作
      • 两个方法的不同点:
        • 当磁盘(手机内置存储)满了,getReadableDatabase()得到的db就不会再往数据库中写内容
        • getWritableDatabase()得到的db不管磁盘满不满,都会尝试去写,直到报错为止
        • 通常使用getReadableDatabase()
    • 利用返回SQliteDataBase进行操作数据库

Cursor,一种数据的类型

  • 类似于数据库的表结构。内部包含一个游标指向,第一次默认是不指向数据!
  • 游标移动
    • moveToFirst():移动到第一条
    • moveToNext():移动到下一条
    • moveToPosition(int positon):移动到指定的条目
    • moveToLast():移动到最后一条
    • moveToPrevious():向上移动
  • Cursor取值
    • get类型(int ColumnIndex):根据列位置取值
    • getColumnIndex(String ColumnIndex):根据列名取第几列
    • getColumnName(int index):根据列位置取列名
    • getColumnCount():获取有多少列!

Cursor结合SimpleCursorAdapter显示数据

//Cursor数据显示到ListView
/**
* ListView
* 1.AdapterView:ListView
* 2.Data:Cursor
* 3.Adapter:SimpleCursorAdapter
* 参数1:上下文对象
* 参数2:单条布局
* 参数3:Data Cursor
* 注意:Cursor数据中,必须包含_id字段,不管是否显示
* 参数4:列的名字
* 参数5:列名对应值对应的,item内部控件的id一一对应
* 参数6:自动刷新,当数据改变以后,它会自动刷新 配合装载器使用
*/
SimpleCursorAdapter adapter = new SimpleCursorAdapter(参数1,参数2,参数3,参数4,参数5,参数6);
//当前在ListActivity
//调用setListAdapter就可以给ListActivity内部ListView设置Adapter
setListAdapter(adapter);

数据事务的使用

  • 事务:一系列动作的集合!
  • 特点:如果一系列动作全部成功,那么事务就成功!如果有一个失败,事务就失败!内的所有动作就失败!
  • 写法:
    db.beginTransaction();
    try {
    1. 动作
    2. 动作
    3. 动作
    4. 动作
    db.setTransactionSuccessful();
    } finally {
    db.endTransaction();
    }
  • 事务包含三个方法:开启、成功、结束
    • 开启和结束是肯定会执行的!
    • 但是成功不一定会执行!
0 0