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系统中使用openssl实现mysql主从复制

    下面是详细讲解“linux系统中使用openssl实现mysql主从复制”的完整攻略。 1. 环境准备 在进行主从复制之前,需要确保主从服务器上已经安装了MySQL数据库,并且已经成功地进行了一次初始同步,保证主从服务器上的数据是一致的。此外,需要在主从服务器上安装openssl工具包,并生成公钥和私钥。 2. 配置主服务器 2.1 修改my.cnf配置文件…

    database 2023年5月22日
    00
  • SQL Server 比较日期大小的方法

    当我们需要在SQL Server中比较日期大小时,可以使用以下方法: 使用比较运算符(比如 “<“, “>”, “<=”, “>=”)比较日期。需要注意的是,在比较之前,我们需要将日期转换为合适的日期格式。下面是一个示例: SELECT * FROM MyTable WHERE CONVERT(VARCHAR(10), MyDateC…

    database 2023年5月21日
    00
  • Mysql使用on update current_timestamp问题

    Mysql中使用on update current_timestamp的功能可以在更新某个字段时自动将该字段的值更新为当前的时间戳,该功能适用于需要记录最后一次更新时间的场景。 以下是实现步骤: 创建数据表时,在需要记录最后一次更新时间的字段上添加on update current_timestamp属性,如下: CREATE TABLE `user_tab…

    database 2023年5月22日
    00
  • 人人都能看懂的 6 种限流实现方案(纯干货)

    人人都能看懂的 6 种限流实现方案(纯干货) 为什么要限流 限流是指对系统中的请求进行控制,限制流量到达一定的阈值,从而保护系统的可用性、稳定性和安全性。在高并发场景、恶意攻击、突发事件等情况下,未实现限流可能导致服务器崩溃、数据库宕机、带宽溢出等问题。因此,限流是保障系统稳定可靠的重要手段。 6 种限流实现方案 1. 固定窗口计数器算法 这是最基本的实现方…

    database 2023年5月22日
    00
  • 在Linux操作系统上安装和更新JAVA8的教程

    下面是在Linux操作系统上安装和更新JAVA8的教程: 确认是否已经安装了Java 在开始之前,首先需要确认本机是否已经安装了Java。可以在终端中输入如下命令: java -version 如果已经安装了Java,命令会输出Java的版本信息。如果没有安装则会提示命令未找到或者类似的错误。 安装Java 从Oracle官网下载安装包 可以从Oracle官…

    database 2023年5月22日
    00
  • mysql的联合索引(复合索引)的实现

    MySQL的联合索引,也被称为复合索引,是指在多个列上创建的一个组合索引。它的主要用途是提高查询效率,但是它的实现方式也有一些注意事项。下面是关于MySQL联合索引的完整攻略: 一、创建复合索引 创建复合索引需要使用CREATE INDEX SQL语句,例如: CREATE INDEX idx_name_age ON users(name, age); 该语…

    database 2023年5月22日
    00
  • centos 7系统下安装laravel运行环境的步骤详解

    接下来我将详细讲解在CentOS 7系统下安装Laravel运行环境的步骤,其中包含以下几个步骤: 步骤一:安装Apache和PHP 首先,我们需要安装Apache以及PHP。我们可以通过以下命令来安装: sudo yum install httpd php php-mysql 安装完毕后,启动Apache服务: sudo systemctl start h…

    database 2023年5月22日
    00
  • 关系型数据库的功能依赖和规范化的基础知识

    介绍 关系型数据库(Relational Database)是指采用了关系模型来组织数据的数据库,其最为核心的概念是关系和关系上的操作,关系是由一组列组成的数据表,每列描述了一个属性,每行则描述了一个记录。 在关系型数据库中,由于数据间的相关性,存在某些属性可以通过其他属性来推导出来,这就是数据库中的数据依赖性。 功能依赖 在关系模型下,属性之间存在着一定的…

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