Android SQLiteDatabase使用详细教程

2018-09-08 16:04:25
  • Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面是SQLiteDatabase的常用方法。

    SQLiteDatabase的常用方法 
    方法名称 方法表示含义 
    openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory) 打开或创建数据库 
    insert(String table,String nullColumnHack,ContentValues values) 插入一条记录 
    delete(String table,String whereClause,String[] whereArgs) 删除一条记录 
    query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy) 查询一条记录 
    update(String table,ContentValues values,String whereClause,String[] whereArgs) 修改记录 
    execSQL(String sql) 执行一条SQL语句 
    close() 关闭数据库 
    1、打开或者创建数据库

    在Android 中使用SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库。它会自动去检测是否存在这个数据库,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundException。

    下面是创建名为“stu.db”数据库的代码: 
    openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory) 
    参数1 数据库创建的路径

    参数2 一般设置为null就可以了

    db=SQLiteDatabase.openOrCreateDatabase(“/data/data/com.lingdududu.db/databases/stu.db”,null); 
    2、创建表

    创建一张表的步骤很简单:

    编写创建表的SQL语句 
    调用SQLiteDatabase的execSQL()方法来执行SQL语句

    下面的代码创建了一张用户表,属性列为:id(主键并且自动增加)、sname(学生姓名)、snumber(学号)

    private void createTable(SQLiteDatabase db){ 
    //创建表SQL语句 
    String stu_table=”create table usertable(_id integer primary key autoincrement,sname text,snumber text)”; 
    //执行SQL语句 
    db.execSQL(stu_table); 

    3、插入数据 
    插入数据有两种方法: 
    ①SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法, 
    参数1 表名称, 
    参数2 空列的默认值 
    参数3 ContentValues类型的一个封装了列名称和列值的Map; 
    ②编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行 
    第一种方法的代码:

    private void insert(SQLiteDatabase db){ 
    //实例化常量值 
    ContentValues cValue = new ContentValues(); 
    //添加用户名 
    cValue.put(“sname”,”xiaoming”); 
    //添加密码 
    cValue.put(“snumber”,”01005”); 
    //调用insert()方法插入数据 
    db.insert(“stu_table”,null,cValue); 

    第二种方法的代码:

    private void insert(SQLiteDatabase db){ 
    //插入数据SQL语句 
    String stu_sql=”insert into stu_table(sname,snumber) values(‘xiaoming’,’01005’)”; 
    //执行SQL语句 
    db.execSQL(sql); 

    4、删除数据

    删除数据也有两种方法:

    ①调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法 
    参数1 表名称 
    参数2 删除条件 
    参数3 删除条件值数组

    ②编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。

    第一种方法的代码:

    private void delete(SQLiteDatabase db) { 
    //删除条件 
    String whereClause = “id=?”; 
    //删除条件参数 
    String[] whereArgs = {String.valueOf(2)}; 
    //执行删除 
    db.delete(“stu_table”,whereClause,whereArgs); 

    第二种方法的代码:

    private void delete(SQLiteDatabase db) { 
    //删除SQL语句 
    String sql = “delete from stu_table where _id = 6”; 
    //执行SQL语句 
    db.execSQL(sql); 

    5、修改数据

    修改数据有两种方法:

    ①调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法 
    参数1 表名称 
    参数2 跟行列ContentValues类型的键值对Key-Value 
    参数3 更新条件(where字句) 
    参数4 更新条件数组

    ②编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。

    第一种方法的代码:

    private void update(SQLiteDatabase db) { 
    //实例化内容值 ContentValues values = new ContentValues(); 
    //在values中添加内容 
    values.put(“snumber”,”101003”); 
    //修改条件 
    String whereClause = “id=?”; 
    //修改添加参数 
    String[] whereArgs={String.valuesOf(1)}; 
    //修改 
    db.update(“usertable”,values,whereClause,whereArgs); 

    第二种方法的代码:

    private void update(SQLiteDatabase db){ 
    //修改SQL语句 
    String sql = “update stu_table set snumber = 654321 where id = 1”; 
    //执行SQL 
    db.execSQL(sql); 

    6、查询数据

    在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:

    public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);

    各个参数的意义说明:

    参数table:表名称

    参数columns:列名称数组

    参数selection:条件字句,相当于where

    参数selectionArgs:条件字句,参数数组

    参数groupBy:分组列

    参数having:分组条件

    参数orderBy:排序列

    参数limit:分页查询限制

    参数Cursor:返回值,相当于结果集ResultSet

    Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.

    Cursor游标常用方法

    方法名称 方法描述 
    getCount() 获得总的数据项数 
    isFirst() 判断是否第一条记录 
    isLast() 判断是否最后一条记录 
    moveToFirst() 移动到第一条记录 
    moveToLast() 移动到最后一条记录 
    move(int offset) 移动到指定记录 
    moveToNext() 移动到下一条记录 
    moveToPrevious() 移动到上一条记录 
    getColumnIndexOrThrow(String columnName) 根据列名称获得列索引 
    getInt(int columnIndex) 获得指定列索引的int类型值 
    getString(int columnIndex) 获得指定列缩影的String类型值

    下面就是用Cursor来查询数据库中的数据,具体代码如下:

    private void query(SQLiteDatabase db) { 
    //查询获得游标 
    Cursor cursor = db.query (“usertable”,null,null,null,null,null,null);

    //判断游标是否为空 
    if(cursor.moveToFirst() { 
    //遍历游标 
    for(int i=0;i

  • 以上是Android SQLiteDatabase使用详细教程的内容,更多 SQLiteDatabase Android 使用 教程 详细 的内容,请您使用右上方搜索功能获取相关信息。
  • 2020-11-17 16:50:16

    JS常见加密混淆方式

    目录 前端js常见混淆加密保护方式 eval方法等字符串参数 emscripten WebAssembly js混淆实现 JSFuck AAEncode JJEncode 代码压缩 变量名混淆 字符串混淆 自我保护,比如卡死浏览器 控制流平坦化 僵尸代码注入 对象键名替换 禁用控制台输出 调试保护,比如无限Debug,定时Debug 域名锁定

  • 2020-11-17 17:08:28

    用js编写WebAssembly ,WebAssembly 现状与实战

    自从 JavaScript 诞生起到现在已经变成最流行的编程语言,这背后正是 Web 的发展所推动的。Web 应用变得更多更复杂,但这也渐渐暴露出了 JavaScript 的问题:

  • 2020-11-17 17:28:06

    AssemblyScript 开发WebAssembly 教程

    WebAssembly 以及通过 AssemblyScript 的扩展,不会使每个网站都神奇地变得更快,但是这并不重要。 WebAssembly 之所以令人兴奋,是因为它可以使更多的应用在 Web 变得中可行。

  • 2020-11-17 21:15:48

    如何保障 API 接口的安全性?前端如何加密

    一、1. HTTP 请求中的来源识别 二、2. 数据加密 三、3. 数据签名 四、4. 时间戳 五、5. AppID 六、6. 参数整体加密 七、7. 限流 八、8. 黑名单 九、1. 压缩 十、2. 混淆 undefined、3. 加密

  • 2020-11-18 14:34:00

    当你写爬虫抓不到APP请求包的时候该怎么办?

    提示:因为高级篇以后的APP将无法使用很通用的方式处理,每种类型甚至是每个APP的反抓包处理方式都会有差别,所以这个系列以后会以【高级篇-具体类型】的形式来写。

  • 2020-11-21 20:41:51

    Kotlin Sealed class类详解

    Sealed class(密封类) 是一个有特定数量子类的类,看上去和枚举有点类似,所不同的是,在枚举中,我们每个类型只有一个对象(实例);而在密封类中,同一个类可以拥有几个对象。

  • 2020-11-22 20:53:43

    Dagger2之Kotlin写法

    修饰构造方法 修饰变量,在宿主类里,引入要注入的实例

  • 2020-11-22 20:56:13

    Dagger2使用详解

    简单的说,就是一个工厂模式,由Dagger负责创建工厂,帮忙生产instance。遵从Java规范JSR 330,可以使用这些注解。现在不研究Dagger2是如何根据注解去生成工厂的,先来看看工厂是什么东西,理解为什么可以实现了DI(Dependency Injection),如何创建IoC(Inverse of Control)容器。

  • 2020-11-22 21:00:28

    dagger.android--Fragment,BaseFragment

    1 使用Fragment参数来代替Activity参数 2 使用 @FragmentKey来代替@ActivityKey 3 使用HasFragmentInjector来代替@HasActivityInjector 4 AndroidInjection.inject(Fragment)方法,在Fragment的onAttach()中调用,而不是在onCreate()中 5 Fragment的Module添加位置,和Activity是不同的,它取决于Fragment需要的其他依赖注入