SQLiteOpenHelper使用详解

2023-05-16

SQLiteOpenHelper 的子类,至少需要实现三个方法:

1 构造函数

调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:

上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

 

 

2 onCreate()方法

它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。


3 onUpgrage() 方法

它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,
这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

 

onOpen()方法

 

打开数据库时调用

 

 

 

接下来讨论具体如何创建表、插入数据、删除表等等。

 

获取 SQLiteDatabase 实例

调用 getReadableDatabase() 或 getWriteableDatabase() 方法,

具体调用那个方法,取决于你是否需要改变数据库的内容:


   
  1. db=(new DatabaseHelper(getContext())).getWritableDatabase();

  2. return (db == null) ? false : true;

上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。 

 

关闭数据库连接

当你完成了对数据库的操作(例如你的 Activity 已经关闭),

需要调用 SQLiteDatabase 的Close() 方法来释放掉数据库连接。 

 

创建表和索引 

为了创建表和索引,需要调用 SQLiteDatabase 的 execSQL() 方法来执行 DDL 语句。

如果没有异常,这个方法没有返回值。 


像上面创建表一样,你可以使用 execSQL() 方法执行 INSERT, UPDATE, DELETE 等语句来更新表的数据。

execSQL() 方法适用于所有不返回结果的 SQL 语句。例如: 

db.execSQL("INSERT INTO widgets (name, inventory)"+ "VALUES ('Sprocket', 5)");


另一种方法是使用 SQLiteDatabase 对象的 insert(), update(), delete() 方法。这些方法把 SQL 语句的一部分作为参数。

 示例如下:

insert()


   
  1. ContentValues cv=new ContentValues();

  2. cv.put(Constants.TITLE, "example title");

  3. cv.put(Constants.VALUE, SensorManager.GRAVITY_DEATH_STAR_I);

  4. db.insert("mytable", getNullColumnHack(), cv);

 

update()方法

有四个参数,分别是

表名,表示列名和值的 ContentValues 对象,可选的 WHERE 条件和可选的填充 WHERE 语句的字符串,这些字符串会替换 WHERE 条件中的“?”标记。

update() 根据条件,更新指定列的值,所以用 execSQL() 方法可以达到同样的目的。 

WHERE 条件和其参数和用过的其他 SQL APIs 类似。 例如:


   
  1. String[] parms=new String[] {"this is a string"};

  2. db.update("widgets", replacements, "name=?", parms);

 

delete()

delete() 方法的使用和 update() 类似,

使用表名,可选的 WHERE 条件和相应的填充 WHERE 条件的字符串。 

 

查询数据库 

类似 INSERT, UPDATE, DELETE,有两种方法使用 SELECT 从 SQLite 数据库检索数据。  

 

1 .使用 rawQuery() 

直接调用 SELECT 语句; 使用 query() 方法构建一个查询。Raw Queries 正如 API 名字,rawQuery() 是最简单的解决方法。通过这个方法你就可以调用 SQL SELECT 语句。例如:

 Cursor c=db.rawQuery( "SELECT name FROM sqlite_master WHERE type='table' AND name='mytable'", null);

 

2.query()

在上面例子中,我们查询 SQLite 系统表(sqlite_master)检查 table 表是否存在。

返回值是一个 cursor 对象,这个对象的方法可以迭代查询结果。

 如果查询是动态的,使用这个方法就会非常复杂。 例如,当你需要查询的列在程序编译的时候不能确定,这时候使用 query() 方法会方便很多。

Regular Queries query() 方法用 SELECT 语句段构建查询。

SELECT 语句内容作为 query() 方法的参数:


   
  1. (要查询的表名,要获取的字段名,WHERE 条件,包含可选的位置参数去替代 WHERE 条件中位置参数的值,GROUP BY 条件,HAVING 条件)

  2. 除了表名,orderby可以为null)

所以,以前的代码段可以可写成:


   
  1. String[] columns={"ID", "inventory"};

  2. String[] parms={"snicklefritz"};

  3. Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);

使用游标 Cursor 

不管你如何执行查询,都会返回一个Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你可以:


   
  1. 通过使用 getCount() 方法得到结果集中有多少记录;

  2. 通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;

  3. 通过 getColumnNames() 得到字段名;

  4. 通过 getColumnIndex() 转换成字段号;

  5. 通过 getString(),getInt() 等方法得到给定字段当前记录的值;

  6. 通过 requery() 方法重新执行查询得到游标;

  7. 通过 close() 方法释放游标资源;

 例如,下面代码遍历 mytable 表:


   
  1. Cursor result=db.rawQuery("SELECT ID, name, inventory FROM mytable");

  2. result.moveToFirst();

  3. while (!result.isAfterLast()) {

  4. int id=result.getInt(0);

  5. String name=result.getString(1);

  6. int inventory=result.getInt(2);

  7. // do something useful with these

  8. result.moveToNext();

  9. }

  10. result.close();

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLiteOpenHelper使用详解 的相关文章

  • python之Tkinter使用详解

    一 前言 1 1 Tkinter是什么 Tkinter 是使用 python 进行窗口视窗设计的模块 Tkinter模块 Tk 接口 是Python的标准Tk GUI工具包的接口 作为 python 特定的GUI界面 xff0c 是一个图像
  • Log4J使用详解(整理)

    1 Log4j是什么 Log4j是Apache的一个开源项目 xff0c 通过使用Log4j xff0c 我们可以控制日志信息输送的目的地是控制台 文件 GUI组件 xff0c 甚至是套接口服务器 NT的事件记录器 UNIX Syslog守
  • 断言ASSERT使用详解

    一 assert的定义 原以为assert 仅仅是个报错函数 xff0c 事实上 xff0c 它居然是个宏 xff0c 并且作用并非 34 报错 34 在经过对其进行一定了解之后 xff0c 对其作用及用法有了一定的了解 xff0c ass
  • C++枚举enum使用详解

    目录 一 什么是枚举enum WHAT 二 使用枚举enum的场景 WHEN and WHERE 三 如何使用枚举enum HOW 1 xff09 枚举的定义 2 xff09 枚举的初始化 3 xff09 指定枚举类型 4 声明枚举对象 5
  • xfire和ajax有哪些特征,XFire使用详解

    最近一直使用XFire做WebServices方式使用 xff0c 总结一些相关经验 xff0c 本文以具体例子进行XFire开发过程分析 1 首先定义一个Interface 具体包含简单类型传值 返回自定义对象 返回集合三个接口方法 im
  • java枚举(enum)使用详解

    文章目录 前言一 枚举类型定义二 访问成员三 遍历四 在switch xff08 xff09 中使用枚举五 方法1 内置方法1 1 ordinal 用于返回成员的索引1 2 compareTo 用于比较枚举类型中两个成员的索引值1 3 va
  • OKHttp使用详解

    1 简介 OkHttp 是一个默认高效的 HTTP 客户端 xff1a HTTP 2 支持允许对同一主机的所有请求共享一个套接字 连接池减少了请求延迟 xff08 如果 HTTP 2 不可用 xff09 透明 GZIP 缩小了下载大小 响应
  • java枚举(enum)使用详解

    文章目录 前言一 枚举类型定义二 访问成员三 遍历四 在switch xff08 xff09 中使用枚举五 方法1 内置方法1 1 ordinal 用于返回成员的索引1 2 compareTo 用于比较枚举类型中两个成员的索引值1 3 va
  • PyTorch:Dataset()与Dataloader()的使用详解

    目录 1 Dataset类的使用 2 Dataloader类的使用 3 总结 Dataset类与Dataloader类是PyTorch官方封装的用于在数据集中提取一个batch的训练用数据的接口 xff0c 其实我们也可以自定义获取每个ba
  • 项目管理:代码检查 pre-commit 使用详解

    Git钩子脚本对于在提交代码审查之前识别简单问题很有用 我们在每次提交时都运行钩子 xff0c 以自动指出代码中的问题 xff0c 例如缺少分号 xff0c 尾随空白和调试语句 通过在代码审阅之前指出这些问题 xff0c 代码审阅者可以专注
  • SKlearn里面的K-means使用详解

    在K Means聚类算法原理中 xff0c 我们对K Means的原理做了总结 xff0c 本文我们就来讨论用scikit learn来学习K Means聚类 重点讲述如何选择合适的k值 1 K Means类概述 在scikit learn
  • Qt QMessageBox使用详解

    本文详细的介绍了QMessageBox控件的各种操作 xff0c 例如 xff1a 消息提示框的使用 判断消息提示框的按钮 标准图标和自定义图标 定时关闭 自定义样式等操作 本文作者原创 xff0c 转载请附上文章出处与本文链接 Qt QM
  • axios 使用详解

    一 安装 cnpm install axios 二 使用 三种写法 span class token comment 第一种写法 span axios span class token punctuation span span class
  • mysql-mysqlbinlog的使用详解

    一 背景 二进制日志在MySQL数据库中有着至关重要的作用 xff0c 而读取二进制日志的工具就显得同样重要了 xff0c 官方的mysqlbinlog就是读取二进制日志的工具 xff0c 这里就结合官网和自己的实践整理一下 xff08 P
  • SQLite 连接对象泄露 - Android

    我正在制作我的第一个 Android 应用程序 我首先学习了一些 sqlite 教程 它教我使用扩展 SQLiteOpenHelper 的 databaseHelper 所以我的databaseHelper确实扩展了SQLiteOpenHe
  • 导出的 SQLite 数据库不是最新的

    此问题仅适用于 SDK 28 设备 模拟器 我使用 SQLiteOpenHelper 创建的 SQLite 数据库在应用程序中完美运行 但是当我将其导出到磁盘 通过 Android studio 或通过代码 时 其大部分数据都会丢失 在应用
  • 对 CursorLoaders 以及将它们与自定义 SQLiteOpenHelper 一起使用感到困惑

    我正在编写一个应用程序 允许人们为他们需要执行的各种任务设置闹钟 我当前的计划是将所有相关数据存储到 SQLite 数据库中 为此 我创建了一个扩展 SQLiteOpenHelper 的类 并用方法填充它来处理我期望必须接受的所有 CRUD
  • 为什么我们需要 onUpgrade(); SQLiteOpenHelper 类中的方法

    我正在关注这个教程 http www androidhive info 2011 11 android sqlite database tutorial http www androidhive info 2011 11 android s
  • 为什么我无法使用 Resources.getSystem() 而不会出现运行时错误?

    public class BobDatabase extends SQLiteOpenHelper private static final String DATABASE NAME bob db private static final
  • Android 2.X 和 3.X 上的 SQLiteOpenHelper 问题

    所以我犯了一个很大的错误 在 android 4 0 上测试我的代码 并认为它在其他版本上也能正常工作 但我在使用 SQLiteOpenHelper 时遇到 2 X 和 3 X 的问题 首先是代码 public class HelperDB

随机推荐

  • Android中的Intent和Intent-filter总结

    一 xff0e 相关概念 xff08 一 xff09 基本概念 Intent中文意思指 意图 按照Android的设计理念 Android使用Intent来封装程序的 调用意图 不管启动Activity Service BroadcastR
  • C#接口中为什么不能像java那样使用static?

    我印象中java里面的接口使用static final修饰的常量 xff0c 不是成员方法 xff0c 使用static修饰的method放在接口中是无意义的 xff0c 接口是用来抽象的 与Java不同 xff0c C 中的接口不能包含域
  • JVM(2)九个部分 p4

    文章目录 1 九大部分1 1 类加载子系统1 2 方法区1 3 堆1 4 直接内存1 5 jvm栈1 6 本地方法栈1 7 垃圾回收系统1 8 PC寄存器1 9 执行引擎 2 堆 栈 方法区的联系3 Java堆的不同结构4 对象已经死了吗4
  • 通过点击事件监听 setOnClickListener 彻底理解回调-Android

    前言 老司机们对于回调肯定熟悉得不能再熟悉了 但是新司机可能还是一脸懵逼的 xff0c 我比较笨 xff0c 当年懵逼了好久 xff0c 看夏安明的这一篇博客地址 xff0c 虽然下边的留言都是 xff0c 写得好 xff01 懂了懂了 x
  • Java 接口和抽象类可以被new么?——顺便总结内部类

    转载 xff1a https blog csdn net hackersaillen article details 47281549 背景 xff1a 最近有同事跟我说了他面试时遇到的问题 xff0c 考官问 xff1a 接口和抽象类可以
  • java之方法的重写

    方法的重写 xff1a 1 在子类中可以根据需要对从基类中继承来的方法进行重写 2 重写的方法和被重写的方法必须具有相同方法名称 参数列表和返回类型 3 重写方法不能使用比被重写的方法更严格的访问权限 程序code class Person
  • Android中传递对象的三种方法

    Android中 xff0c Activity和Fragment之间传递对象 xff0c 可以通过将对象序列化并存入Bundle或者Intent中进行传递 xff0c 也可以将对象转化为JSON字符串 xff0c 进行传递 序列化对象可以使
  • Android中BroadCastReceiver使用(整理)

    BroadcastReceiver 在Android中 xff0c Broadcast是一种广泛运用的在应用程序之间传输信息的机制 而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件 下面将详
  • Android的联通性---USB主机模式(三)

    获取跟设备通信的权限 在跟USB设备进行通信之前 xff0c 你的应用程序必须要获取用户的许可 注意 xff1a 如果你的应用程序使用Intent过滤器来发现接入的USB设备 xff0c 而且用户允许你的应用程序处理该Intent xff0
  • android USB

    google 在推出API 3 0后 就增加啦USB通讯这块 同时为API 2 3提供啦一个USB通讯吧 xff0c 这样也让2 3有啦USB通讯功能 不过只支持USBAccessory模式 USB通讯分为两种模式 xff1a xff08
  • 入门 Kotlin 和 Java 混合开发

    一 前沿 如果你学习过其他的编程语言 xff0c 你就会发现 Java 的语法很是哆嗦 xff0c 可是我们为什么没有放弃 Java 这门编程语言呢 xff1f 因为 JVM 是一个非常好的平台 xff0c 而且 Java 程序员目前在中国
  • kotlin 和java 混编

    如果你之前使用 Java 语言而没有 Kotlin 开发经验 xff0c 不用担心 xff0c Intellij IDEA 会帮你一键转换 xff0c 将 Java 代码转换成 Kotlin 代码 但是反过来就不行了 在 Mac 上 xff
  • Kotlin 基础语法

    Kotlin 文件以 kt 为后缀 包声明 代码文件的开头一般为包的声明 xff1a package com runoob main import java util fun test class Runoob kotlin源文件不需要相匹
  • ‘break‘ not in the ‘loop‘ or ‘switch‘ context

    使用phpexcel导出表格 xff0c 切换到php7 0报错 错误地址 xff1a FILE ThinkPHP Library Vendor phpexcel PHPExcel Calculation Functions php LIN
  • Android数据存储之SQLite

    概览 l 概述 l CRUD方法详解 l 注意事项 概述 对于大量数据的处理 xff0c 如果不想将数据存于服务器端 xff0c Android API提供了对关系数据库SQLite的支持 xff0c 在android SDK中tool目录
  • SQLlite在安卓中的基本详解和简单使用

    一 基础介绍 1 SQLite 是一个进程内的库 是一种轻量级的 自给自足的 无服务器的 无需配置的 事务性的SQL数据库引擎 和他其他的数据库一样 xff0c SQLite引擎不是一个独立的进程 xff0c 可以按应用程序需求进行静态或动
  • android开发中的数据库SQLite的使用

    其实学习android很久了 xff0c 关于数据存储 xff0c 之前学习的时候也一同学习过 xff0c 编程这些东西很久没用都忘得差不多了 xff0c 最近做个项目要用到 xff0c 所以又学习了一遍 android中关于数据的存储有好
  • Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1 数据准备 1 1 数据来源 2 曲线展示 2 1 MPAndroidChart获取 2 2 数据对象获取 2 3 数据展示 3 曲线完善 3 1 图表背景 边框 网格线修改 3 2 X Y轴值的自
  • Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1 数据准备 1 1 数据来源 2 曲线展示 2 1 MPAndroidChart获取 2 2 数据对象获取 2 3 数据展示 3 曲线完善 3 1 图表背景 边框 网格线修改 3 2 X Y轴值的自
  • SQLiteOpenHelper使用详解

    SQLiteOpenHelper 的子类 xff0c 至少需要实现三个方法 xff1a 1 构造函数 调用父类 SQLiteOpenHelper 的构造函数 这个方法需要四个参数 xff1a 上下文环境 xff08 例如 xff0c 一个