android中SQLite使用及特点

Android 中 SQLite 使用及特点

SQLite 简介

SQLite 是一个软件库,实现了关系数据库管理系统的功能。SQLite 的特点是轻量级的、无需独立的服务器进程和系统,以及易于理解和使用。在 Android 中,SQLite 是默认的数据库,用于本地存储数据。

SQLite 使用步骤

1. 导入库依赖

在 Android 项目中,需要在 app/build.gradle 文件中添加以下依赖:

implementation 'androidx.sqlite:sqlite:2.1.0'

2. 创建数据库和数据表

在 Android 中,可以通过继承 SQLiteOpenHelper 类来创建数据库和表。下面是一个创建名为 "users" 的表的示例:

class DBHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

    companion object {
        private const val DATABASE_NAME = "my_database.db"
        private const val DATABASE_VERSION = 1

        private const val TABLE_NAME = "users"
        private const val COLUMN_ID = "_id"
        private const val COLUMN_NAME = "name"
        private const val COLUMN_AGE = "age"
    }

    override fun onCreate(db: SQLiteDatabase?) {
        val CREATE_TABLE_QUERY = "CREATE TABLE $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY, $COLUMN_NAME TEXT, $COLUMN_AGE INTEGER)"
        db?.execSQL(CREATE_TABLE_QUERY)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        val DROP_TABLE_QUERY = "DROP TABLE IF EXISTS $TABLE_NAME"
        db?.execSQL(DROP_TABLE_QUERY)
        onCreate(db)
    }
}

需要注意的是,在 onCreate 方法中,需要执行一个实际的 SQL 查询来创建该表格。

3. 插入数据

可以使用 ContentValues 对象来插入数据。示例代码如下:

val db = dbHelper.writableDatabase
val values = ContentValues().apply {
    put(DBHelper.COLUMN_NAME, "John")
    put(DBHelper.COLUMN_AGE, 25)
}
val rowId = db.insert(DBHelper.TABLE_NAME, null, values)

4. 查询数据

查询数据可以通过 queryrawQuery 方法来实现。查询并获取结果的代码如下:

val db = dbHelper.readableDatabase
val cursor = db.query(DBHelper.TABLE_NAME, null, null, null, null, null, null)
with(cursor) {
    while (moveToNext()) {
        val id = getLong(getColumnIndexOrThrow(DBHelper.COLUMN_ID))
        val name = getString(getColumnIndexOrThrow(DBHelper.COLUMN_NAME))
        val age = getInt(getColumnIndexOrThrow(DBHelper.COLUMN_AGE))
        // 对获取的数据进行处理
    }
}
cursor.close()

5. 更新和删除数据

更新和删除数据可以通过 updatedelete 方法来实现。示例代码如下:

更新数据:

val db = dbHelper.writableDatabase
val values = ContentValues().apply {
    put(DBHelper.COLUMN_NAME, "Peter")
    put(DBHelper.COLUMN_AGE, 28)
}
db.update(DBHelper.TABLE_NAME, values, "$DBHelper.COLUMN_ID = ?", arrayOf(rowId.toString()))

删除数据:

val db = dbHelper.writableDatabase
db.delete(DBHelper.TABLE_NAME, "$DBHelper.COLUMN_ID = ?", arrayOf(rowId.toString()))

SQLite 特点

  1. 轻量级: SQLite 的代码库非常简单,易于部署和管理,不需要复杂的安装过程。

  2. 无需独立的服务器进程和系统:SQLite 以单个文件的形式存储数据库,因此无需运行独立的服务器进程和系统,从而减少了系统开销,加快了数据访问速度。

  3. 无需特别的管理:SQLite 能够自动管理锁,并且可以通过简单的 SQL 语句进行数据操作,因此无需进行额外的管理。

  4. 易于理解和使用:SQLite 使用标准的 SQL 语言进行数据库管理和操作,可读性强,易于理解和使用。

示例

下面是一个使用 SQLite 存储学生信息的示例:

class Student(val id: Int, val name: String, val age: Int)

class DBHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

    companion object {
        private const val DATABASE_NAME = "my_database.db"
        private const val DATABASE_VERSION = 1

        private const val TABLE_NAME = "students"
        private const val COLUMN_ID = "_id"
        private const val COLUMN_NAME = "name"
        private const val COLUMN_AGE = "age"
    }

    override fun onCreate(db: SQLiteDatabase?) {
        val CREATE_TABLE_QUERY = "CREATE TABLE $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY, $COLUMN_NAME TEXT, $COLUMN_AGE INTEGER)"
        db?.execSQL(CREATE_TABLE_QUERY)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        val DROP_TABLE_QUERY = "DROP TABLE IF EXISTS $TABLE_NAME"
        db?.execSQL(DROP_TABLE_QUERY)
        onCreate(db)
    }

    fun addStudent(student: Student) {
        val db = writableDatabase
        val values = ContentValues().apply {
            put(COLUMN_ID, student.id)
            put(COLUMN_NAME, student.name)
            put(COLUMN_AGE, student.age)
        }
        db.insert(TABLE_NAME, null, values)
    }

    fun getStudentById(id: Int): Student? {
        val db = readableDatabase
        val cursor = db.rawQuery("SELECT * FROM $TABLE_NAME WHERE $COLUMN_ID = ?", arrayOf(id.toString()))
        return if (cursor.moveToFirst()) {
            val name = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME))
            val age = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_AGE))
            Student(id, name, age)
        } else {
            null
        }
    }

    fun getAllStudents(): List<Student> {
        val students = mutableListOf<Student>()
        val db = readableDatabase
        val cursor = db.rawQuery("SELECT * FROM $TABLE_NAME", null)
        with(cursor) {
            while (moveToNext()) {
                val id = getInt(getColumnIndexOrThrow(COLUMN_ID))
                val name = getString(getColumnIndexOrThrow(COLUMN_NAME))
                val age = getInt(getColumnIndexOrThrow(COLUMN_AGE))
                students.add(Student(id, name, age))
            }
        }
        cursor.close()
        return students
    }

    fun deleteStudentById(id: Int) {
        val db = writableDatabase
        db.delete(TABLE_NAME, "$COLUMN_ID = ?", arrayOf(id.toString()))
    }

    fun updateStudent(student: Student) {
        val db = writableDatabase
        val values = ContentValues().apply {
            put(COLUMN_NAME, student.name)
            put(COLUMN_AGE, student.age)
        }
        db.update(TABLE_NAME, values, "$COLUMN_ID = ?", arrayOf(student.id.toString()))
    }
}

以上示例演示了如何使用 SQLite 存储和获取学生的信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android中SQLite使用及特点 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Linux 每天自动备份mysql数据库的方法

    Linux每天自动备份MySQL数据库的方法可以通过使用crontab和压缩包命令联合完成。下面是具体步骤: 1.使用crontab定时备份数据库 使用crontab可以指定在特定时间或隔一定时间执行某个命令或脚本。可以将备份脚本作为一个可执行文件,然后在crontab里面设置定时备份的时间。 首先,我们需要进入Linux系统,使用以下命令创建一个备份脚本 …

    database 2023年5月22日
    00
  • oracle中where 子句和having子句中的区别介绍

    当我们在使用 Oracle 数据库的时候,经常需要使用到where子句和having子句来约束查询结果。尽管它们都是用于过滤数据的,但是它们还是存在一定的区别。下面我们详细介绍一下这两个子句之间的区别。 where子句 where子句用于 SELECT 语句中,确定是否包括要返回的行。where子句对应的是表格中的单个行。where子句去掉不需要的行,只剩下…

    database 2023年5月21日
    00
  • sqlserver2005自动创建数据表和自动添加某个字段索引

    对于SQL Server 2005自动创建数据表和自动添加某个字段索引,我们需要注意以下三个方面: 数据库设计 建表语句 添加索引 接下来我会分别对这三个方面进行详细讲解。 1. 数据库设计 在设计数据库时,需要合理规划表之间的关系和字段的类型及长度。此外,还需要考虑字段是否需要添加索引。 例如,我们设计一个学生成绩管理系统,其中有学生表和成绩表,它们的关系…

    database 2023年5月21日
    00
  • 附加到SQL2012的数据库就不能再附加到低于SQL2012的数据库版本的解决方法

    要解决 “附加到 SQL Server 2012 的数据库就不能再附加到低于 SQL Server 2012 的数据库版本” 这个问题,我们需要进行以下步骤: 创建脚本文本文件,将 SQL 2012 数据库导出为 SQL 脚本文件。 对 SQL 脚本文件进行编辑,将 SQL Server 2012 版本中的新特性代码(如FILESTREAM等)删除。 修改S…

    database 2023年5月21日
    00
  • DDL数据库与表的创建和管理深入讲解使用教程

    DDL数据库与表的创建和管理深入讲解使用教程 DDL(Database Definition Language)是数据库定义语言,通常用于创建或修改数据库、表、约束条件等。在数据库中,DDL语句常用于CREATE、ALTER、DROP等操作。 DDL语句执行前需要先连接数据库,具体步骤如下: 打开命令行工具,输入mysql -u用户名 -p密码进入MySQL…

    database 2023年5月21日
    00
  • Redhat 6.2 下 oracle 11g R2的安装详解第1/2页

    为了提高可读性,我将分为两部分进行讲解。 Redhat 6.2 下 oracle 11g R2的安装详解第1/2页(上) 1. 确认系统参数 在进行oracle 11g R2的安装前,需要确认系统的参数设置是否符合要求,这里需要特别关注以下参数: 1.1 内存和交换分区 oracle 11g R2对于系统内存和交换分区的要求非常高,建议开启至少2G的内存以及…

    database 2023年5月22日
    00
  • 搭建自己的PHP MVC框架详解

    搭建自己的 PHP MVC 框架非常有意义,它不仅可以让我们更好地理解 MVC 设计模式,还可以帮助我们更好地学习和掌握 PHP 技术栈。下面,我将详细讲解如何搭建自己的 PHP MVC 框架,包括以下步骤。 一、搭建框架目录结构 首先,我们需要搭建一个合适的目录结构。建议按照 MVC 设计模式的要求,将代码分为 Model、View 和 Controlle…

    database 2023年5月21日
    00
  • nacos无法连接mysql的解决方法

    下面是关于“nacos无法连接mysql的解决方法”的完整攻略: 问题描述 在使用Nacos时,mysql 数据库可能出现连接失败的情况。此时,无法正常使用 Nacos 服务。 解决方法 在解决此问题之前,需要先明确一下可能出现的原因,有以下几点: 数据库配置信息有误 mysql数据库未运行或未成功启动 mysql数据库出现了其他问题 为了解决以上问题,我们…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部