在 Android 中使用 SQLite 数据库及其操作详解

在 Android 开发中,使用 SQLite 数据库是一种常见的持久化数据存储方式。本文将通过代码示例详细讲解如何在 Android 中创建数据库表、插入数据、执行查询操作以及验证查询结果。

1. 创建数据库表

首先,我们需要定义数据库表的结构。在 Android 中,这通常通过 SQL 语句来实现。在 SQLiteOpenHelperonCreate() 方法中执行 SQL 语句来创建表。

java 复制代码
String sql = "create table notepad(id integer primary key autoincrement, content text, time text)";
db.execSQL(sql);
  • id 是主键,类型为 INTEGER,并且通过 AUTOINCREMENT 自动递增。
  • content 是用于存储笔记内容的文本字段。
  • time 是用于存储时间信息的文本字段。

当应用程序第一次运行时,数据库会通过执行这条 CREATE TABLE 语句来创建 notepad 表。

2. 插入数据到数据库

接下来,我们定义一个方法,将数据插入到 notepad 表中。我们使用 execSQL() 方法来执行 INSERT 语句。

java 复制代码
public void insertNotepad(SQLiteDatabase db, String content, String time) {
    String sql = "insert into notepad (content, time) values (?, ?)";
    db.execSQL(sql, new Object[]{content, time});
}
  • insert into notepad (content, time):指定要插入的表名和列名。
  • values (?, ?) :占位符 ? 用于安全地插入数据。这个写法能有效防止 SQL 注入攻击。
  • new Object[]{content, time} :创建一个 Object 数组,将 contenttime 作为参数传递,依次替换 SQL 语句中的占位符 ?

该方法会将指定的笔记内容和时间插入到 notepad 表中,数据库会自动生成唯一的 id 值。

3. 执行查询操作

我们还需要从数据库中查询数据。下面的方法用于根据 id 查询 notepad 表中的记录。

java 复制代码
public Cursor getNotepad(SQLiteDatabase db, int id) {
    return db.rawQuery("select * from notepad where id = ?", new String[]{String.valueOf(id)});
}
  • select * from notepad where id = ? :这是一条 SELECT 查询语句,用于检索 id 等于特定值的记录。? 是占位符。
  • new String[]{String.valueOf(id)} :将 id 转换为字符串,并通过数组传递给 SQL 语句以替换占位符 ?

调用此方法时,会返回一个 Cursor 对象,它包含查询到的结果集。

4. 验证查询结果

查询到结果后,我们可以使用 Cursor 对象来遍历结果并提取字段数据。

java 复制代码
Cursor cursor = dbHelper.getNotepad(db, 1);
System.out.println("Query executed for record with id 1.");

if (cursor.moveToFirst()) {
    int id = cursor.getInt(cursor.getColumnIndex("id"));
    String content = cursor.getString(cursor.getColumnIndex("content"));
    String time = cursor.getString(cursor.getColumnIndex("time"));

    System.out.println("Record found: ID = " + id + ", Content = " + content + ", Time = " + time);

    assertEquals(1, id);
    assertEquals("Test content", content);
    assertEquals("2024-08-23 12:00", time);
} else {
    System.out.println("No record found.");
}
  • cursor.moveToFirst() :将 Cursor 移动到第一条记录。如果有记录存在,则返回 true
  • cursor.getInt(cursor.getColumnIndex("id")) :通过列名获取 id 列的值。
  • cursor.getString(cursor.getColumnIndex("content"))cursor.getString(cursor.getColumnIndex("time")) :分别获取 contenttime 列的值。

通过这些方法,我们可以提取查询结果并输出到控制台。同时,使用 assertEquals 方法来验证结果是否与预期一致。

5. 参数化查询的安全性

在上述的 SQL 查询语句中,我们使用了占位符 ?,并将实际参数通过数组传递到 SQL 语句中。这是一种参数化查询的方式,可以有效防止 SQL 注入攻击。通过参数化查询,你无需手动拼接 SQL 语句,可以确保输入的数据不会被恶意利用来修改 SQL 逻辑。

例如:

java 复制代码
String sql = "select * from notepad where id = ?";
db.rawQuery(sql, new String[]{String.valueOf(id)});

这里的 new String[]{String.valueOf(id)} 创建了一个字符串数组,其中包含 id 的字符串形式。这个数组会替换 SQL 语句中的占位符 ?

6. 代码总结

通过这篇文章的示例,我们展示了如何在 Android 中使用 SQLite 数据库,创建表、插入数据、查询数据,并对查询结果进行验证。以下是代码的完整实现:

java 复制代码
public class MyDbHelper extends SQLiteOpenHelper {

    public MyDbHelper(Context context) {
        super(context, "mydatabase.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "create table notepad(id integer primary key autoincrement, content text, time text)";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS notepad");
        onCreate(db);
    }

    public void insertNotepad(SQLiteDatabase db, String content, String time) {
        String sql = "insert into notepad (content, time) values (?, ?)";
        db.execSQL(sql, new Object[]{content, time});
    }

    public Cursor getNotepad(SQLiteDatabase db, int id) {
        return db.rawQuery("select * from notepad where id = ?", new String[]{String.valueOf(id)});
    }
}

通过这个简单的示例,你可以掌握在 Android 应用中如何使用 SQLite 来执行数据库操作。你可以进一步扩展这些代码来实现更多功能,比如更新和删除记录、复杂查询等。

7. 小结

SQLite 是 Android 中非常强大且轻量的内置数据库引擎,适合处理小型的持久化数据。通过本文的代码示例,你可以快速上手并在实际项目中使用 SQLite 来管理和操作数据。在实际开发中,务必采用参数化查询等安全手段来防止 SQL 注入攻击,确保数据的安全性。

如果你有更复杂的需求,例如需要处理大量数据、关系复杂的数据操作,可能需要考虑其他数据库解决方案,如使用 Room 或者将数据存储到云端。希望本文能够帮助你更好地理解 SQLite 在 Android 中的使用,提升开发效率和数据管理能力。

相关推荐
大猫熊猫35 分钟前
Android Studio 加载多个FLutter项目
android·ide·android studio
!!!+++36 分钟前
Android Studio打开Modem模块出现:The project ‘***‘ is not a Gradle-based project
android·ide·android studio
MXsoft6181 小时前
数据中心服务器与存储运维的深度实践与挑战
数据库
Fireworkitte2 小时前
MySQL常用的函数
数据库·mysql
Tom哈哈2 小时前
Android命令行查看CPU频率和温度
android
帅得不敢出门2 小时前
安卓framework美化手势导航侧滑返回UI
android·java·ui·framework·安卓·开发·定制
qq_200337392 小时前
可以从以下几个方面判断一个 SQL 查询是否需要优化:
数据库
乐容2 小时前
14,子查询语句嵌套
数据库
cyt涛2 小时前
Redis访问工具
数据库·redis·spring cache·注解·客户端·lettuce·redistemplae
AllWe$2 小时前
九、Redis 的实际使用与Redis的设计
数据库·redis·缓存