您好!欢迎来到源码码网

Android本地存储之SQLite数据库存储数据

  • 源码教程
  • 来源:源码码网
  • 编辑:admin
  • 时间:2021-02-19 19:38
  • 阅读:692

前面我们介绍了用 SharedPreferences 和文件存储信息的方法,但是当频繁大量地使用数据存储时,就要用到数据库来管理信息数据。

在 
Android 中,我们使用 SQLite 数据库,在应用中也常常会用到 SQLite 来存储、管理、维护数据,下面将详细介绍 SQLite 的使用方法。

SQLite 数据库简介

Android 通过 SQLite 数据库引擎来实现结构化数据存储。

Android 系统提供对 SQLite 数据库的完全支持,在数据库应用程序中,任何类都可以通过名字对已创建的数据库进行访问,但是在应用程序之外不可以。

SQLite 是一个轻量级数据库,第一个版本诞生在 2000 年 5 月,其遵守 ACID 的关联式数据库管理系统,最初就是为嵌入式设计的,其占用资源非常少,在内存中只需要占用几百千字节(KB)的存储空间,这也是 Android 采用 SQLite 数据库的重要原因之一。


同时,SQLite 还支持事务处理功能,根据相关资料可知,SQLite 的处理速度比 MySQL、PostgreSQL 等著名的开源数据库管理系统更快。另外,SQLite 数据库不像其他的数据库(如Oracle),它没有服务器进程。

SQLite 通过文件保存数据库,该文件是跨平台的,可以自由复制。一个文件就是一个数据库,数据库名称即文件名;

数据库里面可以包含多个表格,在每个表格中可以添加多条记录,但记录没有名称;记录可以由多个字段组成,每个字段都要有相对应的值,每个值都必须指定类型。基于SQLite自身的先天优势,其在嵌入式领域中得到了广泛应用。

SQLite 支持 SQL 语言,由 SQL 编译器、内核、后端以及附件组成。

SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。


Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库,在 Android 开发中使用 SQLite 相当简单。

由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限的设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库。

在 Android 开发中,我们需要学习使用这些 API。另外需要了解的是,数据库存储在 data/<项目文件夹>/databases/ 目录下。

操作 SQLite 数据的步骤如下:

1)创建 SQLite 数据库。

Android 系统推荐的创建 SQLite 数据库的方法是创建实现 SQLiteOpenHelper 接口的子类,并且重写 onCreate() 方法,在该方法中执行用于创建 SQLite 数据库的命令。

所创建的数据库同SharedPreferences一样被放置在 /data/data/<your package name>/database 目录下,例如:

  1. public class DictionaryOpenHelper extends SQLiteOpenHelper {


  2. private static final int DATABASE_VERSION = 2;

  3. private static final String DICTIONARY_TABLE_NAME = "dictionary";

  4. //创建数据库的SQL语句

  5. private static final String DICTIONARY_TABLE_CREATE =

  6. "CREATE TABLE " + DICTIONARY_TABLE_NAME + "(" + KEY_WORD + " TEXT, " +

  7. KEY_DEFINITION + "TEXT);";

  8. DictionaryOpenHelper(Context context) {

  9. super(context, DATABASE_NAME, null, DATABASE_VERSION);

  10. }

  11. @Override

  12. public void onCreate(SQLiteDatabase db) {

  13. db.execSQL(DICTIONARY_TABLE_CREATE);//执行SQL语句

  14. }

  15. }

2)获取数据库对象

通过实现 SQLiteOpenHelper 接口的类的对象,调用 getWritableDatabase() 和 getReadableDatabase() 方法,可以返回所创建数据库的 SQLiteDatabase 对象。

3)对数据库进行操作

SQLiteDatabase 对象提供了对数据库进行操作的一系列方法,例如 query、insert、delete、update 等,进而对 SQLite 数据库进行读写等操作。

4)返回结果

对数据库的查询操作会返回一个 Cursor 对象,通过该对象可以从返回的结果中读取出行、列信息。

SQLite 数据库操作

Android 提供了创建和使用 SQLite 数据库的 API。Android SDK 提供了一系列对 SQLite 数据库进行操作的类和接口,这里我们简单介绍一下。

1)SQLiteDatabase 类

SQLiteDatabase 是一个数据库访问类,此类封装了一系列数据库操作的 API,使其可以对数据进行 CRUD 操作,即添加、查询、更新、删除等。一些常用的操作数据库的方法如下表所示。

SQLiteDatabase常用方法

image.png

2)SQLiteOpenHelper 类

SQLiteOpenHelper 是一个抽象类,用来创建和版本更新。

SQLiteOpenHelper 的子类通过 getReadableDatabase() 和 getWritableDatabase() 方法来获取 SQLiteDatabase 实例对象,并保证以同步方式访问。

通常情况下,getReadableDatabase() 和 getWritableDatabase() 都是创建或者打开一个可写数据库,并返回相同的对象。

只有在某些情况下,例如磁盘空间满了,或者数据库只能以只读方式打开的时候,getReadableDatabase() 方法才会以查询方式打开数据库。

其一般的用法是定义一个类继承之,并实现其抽象方法来创建和更新数据库,其常见的方法如下表所示

SQLiteOpenHelper常用方法

image.png

3)Cursor 接口

Cursor 是一个游标接口,在数据库中使用时作为返回值,相当于结果集 ResultSet。它提供了遍历查询结果的方法。Cursor 游标的一些常用方法如下表所示。

Cursor游标常用方法

image.png

这些方法的使用可以通过创建数据库、创建表和执行 SQL 语句的过程一一进行介绍。

1)打开或创建数据库

openOrCreateDatabase() 方法会自动检测要打开的数据库是否存在,如果存在就打开,否则创建一个数据库。

若该方法运行成功,则返回一个 SQLiteDatabase 对象,否则抛出异常 FileNotFoundException。下面为创建名为“sie.db”的数据库的代码:

SQLiteDatabase database=SQLiteDatabase.openOrCreateDatabase("/data/data/sie.db",null);

2)创建数据表

使用 SQLiteDatabase 的 execSQL() 方法执行 SQL 语句,便能创建一个表。

下面创建一个表,其中有三个属性:_id 为主键并自动增加,name 为姓名,number 为编号,相关代码如下:

String table="create table sietexttable(_id integer primary key autoincrement,name text, number text)";
database.execSQL(table);

3)插入数据

使用 SQLiteDatabase 的 insert(String table,String nullColumnHack, ContentValues values) 方法。

参数说明:

  • 第一个参数是表名称。

  • 第二个参数是空列的默认值。

  • 第三个参数是ContentValues封装的列的名称和对应的列值。代码如下:

  1. ContentValues values=new ContentValues();

  2. values.put("name", "sietext01");

  3. values.put("number", "001");

  4. database.insert("table", null, values);

4)删除数据

使用 SQLiteDatabase 的 delete(String table,String whereClause,String[] whereArgs) 方法。

参数说明:

  • 第一个参数是表的名称。

  • 第二个参数是删除条件。

  • 第三个参数是条件值数组。


5)修改数据

使用 SQLiteDatabase 的 update(String table,ContentValues values,String whereClause, String[] whereArgs) 方法。

参数名称:

  • 第一个参数是表名称。

  • 第二个参数是更新行和列的 ContentValues 类型的键值对。

  • 第三个参数是更新条件。

  • 第四个参数是更新的条件数组。


此外,上述三种能够引起数据库数据改变的操作,都可以通过 SQLiteDatabase 的 execSQL() 方法来完成。

6)查询数据

在 Android 中通过 Cursor 类来实现,使用 SQLiteDatabase.query() 方法会得到一个 Cursor 对象。

Cursor 用于指向查询结果中的记录。下面使用 Cursor 查询数据库中的数据,代码如下:

  1. Cursor cursor = database.query("table",null,null,null,null,null,null);

  2. /*判断游标是否为空*/

  3. if(cursor.moveToFirst()){

  4. for (int i = 0;i<cursor.getCount();i++){

  5. cursor.moveToNext();

  6. //获得ID

  7. int id = cursor.getInt(0);

  8. //获得用户名

  9. String name = cursor.getString(1);

  10. //获得编号

  11. String number = cursor.getString(2);

  12. }

  13. }

SQLiteOpenHelper 类是 SQLiteDataBase 的帮助类,这个类主要用于打开或者创建数据库,并返回数据库对象,同时对数据库的版本进行管理。并且它是一个抽象类,需要继承它并实现里面的两个抽象方法:

  • onCreate(SQLiteDatabase):在数据库第一次生成的时候会调用这个方法,一般在这个方法中生成数据库表。

  • onUpgrade(SQLiteDatabase,int,int):当数据库需要升级的时候,系统会主动调用这个方法。一般在这个方法中删除原有数据表,并建立新的数据表。


特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 大型后台管理系统,用户登录状态该如何保存?
  • 大型后台管理系统,用户登录状态该如何保存?
  • 大型后台管理系统的用户登录状态保存需要综合考虑安全性、用户体验和系统架构。以下是企业级的完整方案:1.多层级存储策略class AuthManager {    constructor() {        this.storage = { &n
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2025-11-06 12:16
  • 阅读:350
  • 源码交易平台的支付困局与解决方案:如何通过专业支付系统提升交易效率
  • 源码交易平台的支付困局与解决方案:如何通过专业支付系统提升交易效率
  • 在数字经济蓬勃发展的今天,源码交易市场已成为互联网创业者和开发商的重要资源池。从电商系统源码到社交应用框架,从小程序解决方案到企业级管理系统,越来越多的开发者、初创企业和传统商家通过源码交易平台快速获取技术资产,实现商业目标的加速。源码交易市场的繁荣反映了数字化转型的迫切需求——企业需要快速迭代,开发者需要快速变现,用户需要快速启动。然而,在这个高速发展的市场中,一个长期被忽视但至关重要的问题浮现出来:支付系统的效率与安全性已成为制约交
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2025-10-23 15:16
  • 阅读:298
  • Spring Boot 工程中 maven-surefire-plugin 测试执行失败及解决方法
  • Spring Boot 工程中 maven-surefire-plugin 测试执行失败及解决方法
  • 在SpringBoot工程编译时遇到maven-surefire-plugin的测试执行失败错误(Failedtoexecutegoalorg.apache.maven.plugins:maven-surefire-plugin:3.5.3:test),通常与测试环节相关。以下是常见原因及解决方法:1.测试用例执行失败• 原因:最常见的是测试用例(*Test.java)运行时抛出异常(如断言失败、空指针等),导
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2025-10-13 10:57
  • 阅读:363
  • WeMark - 微信小程序图片水印
  • WeMark - 微信小程序图片水印
  • 一个纯前端的微信小程序图片水印工具。支持文字/图片水印、单个与全屏两种模式,透明度与角度调节、单个水印位置X/Y控制,预览与对比模态、历史记录(100条)等功能。
  • 源码教程
  • 来源:源码码用户
  • 编辑:yg
  • 时间:2025-09-22 16:09
  • 阅读:287
联系客服
源码代售 源码咨询 素材咨询 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部