在Android开发中,SQLite数据库是常用的轻量级数据库,用于存储应用程序的数据。SQLiteOpenHelper是管理SQLite数据库的关键类,它提供了创建、升级和打开数据库的方法。本文将深入探讨如何使用`execSQL()`和`rawQuery()`这两个核心方法来执行数据的添删改查操作。 `SQLiteDatabase`的`execSQL()`方法主要用于执行SQL语句,如插入(insert)、删除(delete)、更新(update)和创建表等。例如,以下代码展示了如何使用`execSQL()`插入一条数据: ```java SQLiteDatabase db = ...; db.execSQL("INSERT INTO person(name, age) VALUES('测试数据', 4)"); db.close(); ``` 然而,直接将用户输入的数据拼接到SQL语句中可能存在SQL注入的风险。为了避免这个问题,我们可以使用`execSQL(String sql, Object[] bindArgs)`的重载版本,它支持占位符参数。下面是一个安全的插入示例: ```java db.execSQL("INSERT INTO person(name, age) VALUES(?, ?)", new Object[]{"测试数据", 4}); ``` 这里的问号`?`作为占位符,`bindArgs`数组中的元素按顺序与这些占位符匹配,这样可以确保即使用户输入包含特殊字符的数据,也不会破坏SQL语句的结构。 另一个关键方法`rawQuery()`则专门用于执行查询操作,例如: ```java String query = "SELECT * FROM person WHERE age > ?"; Cursor cursor = db.rawQuery(query, new String[]{"30"}); // 遍历cursor获取查询结果 ``` 在这个例子中,`rawQuery()`接受SQL查询语句和一个参数数组,参数数组同样用于替换SQL语句中的占位符。 `SQLiteOpenHelper`是一个非常重要的辅助类,它负责数据库的初始化和版本管理。例如: ```java public class DatabaseHelper extends SQLiteOpenHelper { private static final String name = "itcast"; private static final int version = 1; public DatabaseHelper(Context context) { super(context, name, null, version); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20), age INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL"); // 或者使用DROP TABLE IF EXISTS person删除表,然后重新创建表 } } ``` `onCreate()`方法会在首次创建数据库时调用,用于创建表。`onUpgrade()`方法则在数据库版本升级时执行,通常用于修改表结构,如添加新列或删除旧列。需要注意的是,升级过程中应尽可能保留用户数据,避免不必要的数据丢失。 总结来说,`execSQL()`和`rawQuery()`是Android中进行SQLite数据库操作的重要工具。`execSQL()`适用于执行任意SQL语句,尤其是包含增删改操作的语句,而`rawQuery()`则专用于执行查询操作。同时,`SQLiteOpenHelper`是数据库管理的核心,负责数据库的创建、升级和版本管理,确保了数据的安全性和一致性。在实际开发中,合理运用这些方法和类,能够高效地管理应用程序的SQLite数据库。
剩余7页未读,继续阅读
- 粉丝: 3
- 资源: 1011
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- dbeaver-ce-24.3.1-x86-64-setup.exe
- 国际象棋桌子检测6-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- 某平台广告投入分析与销售预测
- 连接ESP32手表来做验证20241223-140953.pcapng
- 小偏差线性化模型,航空发动机线性化,非线性系统线性化,求解线性系统具体参数,最小二乘拟合 MATLAB Simulink 航空发动机,非线性,线性,非线性系统,线性系统,最小二乘,拟合,小偏差,系统辨
- 好用的Linux终端管理工具,支持自定义多行脚本命令,密码保存、断链续接,SFTP等功能
- Qt源码ModbusTCP 主机客户端通信程序 基于QT5 QWidget, 实现ModbusTCP 主机客户端通信,支持以下功能: 1、支持断线重连 2、通过INI文件配置自定义服务器I
- QGroundControl-installer.exe
- 台球检测40-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 颜色拾取器 for Windows