android中SQLite使用及特点

yizhihongxing

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日

相关文章

  • 深入浅出的学习Mysql

    深入浅出的学习MySQL攻略 如果您想深入学习MySQL数据库,以下是一些步骤和示例,可以让您从初学者到初级用户,再到专家。 步骤1: 安装MySQL 首先,您需要在您的计算机上安装MySQL。您可以官方网站找到适合您系统的版本。安装后,请务必设置root账户密码,然后启动MySQL服务。 步骤2: 学习SQL基础知识 学习SQL是学习MySQL的基础。您需…

    database 2023年5月19日
    00
  • Postgresql的日志配置教程详解

    Postgresql的日志配置教程详解 介绍 Postgresql是一个流行的开源关系型数据库,作为一款大型数据库系统,它提供了强大的日志功能来记录数据库操作和系统事件等信息。在使用Postgresql时,合理配置日志可以帮助我们更好地了解数据库运行情况和故障排查。 配置步骤 步骤一:打开日志记录功能 在Postgresql的配置文件中,可以通过设置logg…

    database 2023年5月19日
    00
  • Redhat7.3安装MySQL8.0.22的详细教程(二进制安装)

    Redhat7.3安装MySQL8.0.22的详细教程(二进制安装) 步骤一:下载MySQL二进制安装包 打开MySQL官网 https://dev.mysql.com/downloads/mysql/ 在下载页中选择 “MySQL Community Server” 在 “Select Operating System” 中选择 “Linux-Generi…

    database 2023年5月22日
    00
  • 如何在SQL Server 2008下轻松调试T-SQL语句和存储过程

    下面是详细讲解如何在SQL Server 2008下轻松调试T-SQL语句和存储过程的完整攻略: 1. 在SQL Server Management Studio中启用调试功能 首先,我们需要确认SQL Server Management Studio是否已经启用了调试功能。可以在菜单栏中依次点击 “工具” -> “选项” -> “调试” 来查看…

    database 2023年5月21日
    00
  • 详解Linux下出现permission denied的解决办法

    详解Linux下出现permission denied的解决办法 在 Linux 系统中,文件和目录有不同的权限设置,当尝试执行某些操作时,可能会出现 “permission denied” 的错误提示。本文将介绍 “permission denied” 错误的几种常见情况和解决方法。 1. 普通用户无权限 在 Linux 中,文件和目录的权限分为三类:文件…

    database 2023年5月21日
    00
  • MySQL 服务和数据库管理

    MySQL服务和数据库管理是Web应用程序和网站开发环境中的重要组成部分。在本文中,我们将介绍MySQL服务和数据库管理的完整攻略。 MySQL服务 MySQL是一种开源的关系型数据库管理系统,可以将其安装在服务器上以供多个用户使用。在本节中,我们将介绍如何安装和配置MySQL服务。 安装MySQL 首先,你需要从MySQL的官方网站下载MySQL安装程序。…

    database 2023年5月22日
    00
  • Mysql实现定时清空一张表的旧数据并保留几条数据(推荐)

    针对这个问题,我来详细讲解一下Mysql实现定时清空一张表的旧数据并保留几条数据的完整攻略。 1. 确定需求 在开始实现之前,我们需要明确清楚自己的需求。这里我们需要清空一张表的旧数据,但是又需要保留一定量的最新数据。因此,我们需要考虑以下几个问题: 如何判断哪些数据是旧数据? 如何保留最新的几条数据? 如何清空旧数据? 2. 创建存储过程 Mysql提供了…

    database 2023年5月22日
    00
  • SQL 解析IP地址

    下面我就为您详细讲解SQL解析IP地址的攻略。 IP地址解析 将IP地址转换成数字,常常根据需求而变化。例如,我们希望对IP地址进行排序,其中就需要将其转化为数字。另一个常见的场景是,根据IP地址段查找与之匹配的记录。 要将IP地址转化为数字,需要将四个数字组成的字符串转化成32位无符号整数。这样,我们就可以对它进行运算、排序和比较。下面我们将逐步详细介绍该…

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