上一篇
安卓创建sqlite数据库
- 行业动态
- 2025-04-24
- 3114
在安卓中创建SQLite数据库需继承SQLiteOpenHelper,实现onCreate()方法定义表结构,onUpgrade()处理版本升级,通过getWritableDatabase()初始化或打开数据库,支持增删改查
SQLiteDatabase类简介
Android提供了android.database.sqlite.SQLiteDatabase
类用于操作SQLite数据库,该类封装了SQLite的核心功能,支持增删改查等操作。
创建数据库步骤
获取数据库实例
通过SQLiteOpenHelper
或Context.openOrCreateDatabase()
获取数据库对象,推荐使用SQLiteOpenHelper
管理数据库版本。定义表结构
使用SQL语句创建表,指定字段类型和约束条件。执行CRUD操作
通过insert()
、delete()
、update()
、query()
方法进行数据操作。
核心方法与示例
方法名 | 功能描述 | 示例代码 |
---|---|---|
insert() | 插入数据 | db.insert("users", null, contentValues); |
delete() | 删除数据 | db.delete("users", "id=?", new String[]{String.valueOf(userId)}); |
update() | 更新数据 | db.update("users", contentValues, "id=?", new String[]{id}); |
query() | 查询数据 | Cursor cursor = db.query("users", null, "age>?", new String[]{"30"}); |
execSQL() | 执行SQL语句 | db.execSQL("CREATE TABLE users(id INTEGER PRIMARY KEY)"); |
完整示例代码
public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "app.db"; private static final int VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建用户表 db.execSQL("CREATE TABLE users(" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT NOT NULL," + "age INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 数据库升级时删除旧表(实际场景需迁移数据) db.execSQL("DROP TABLE IF EXISTS users"); onCreate(db); } }
数据操作示例
// 插入数据 ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("age", 25); long rowId = db.insert("users", null, values); // 查询数据 Cursor cursor = db.query("users", null, "age>?", new String[]{"20"}, null, null, "age DESC"); while(cursor.moveToNext()){ int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); // 处理数据... } cursor.close();
数据库升级处理
在onUpgrade()
方法中:
- 比较
oldVersion
和newVersion
- 根据版本差异执行不同的升级逻辑(如添加新表/字段)
- 调用
db.setVersion(VERSION)
更新版本号
最佳实践
- 使用SQLiteOpenHelper:自动管理数据库创建和版本控制
- 参数化查询:防止SQL注入攻击
- 事务处理:批量操作时使用
beginTransaction()
提高效率 - 及时关闭资源:操作完成后关闭
SQLiteDatabase
和Cursor
问题与解答
Q1:如何防止SQL注入攻击?
A1:使用参数化查询代替字符串拼接。
String sql = "SELECT FROM users WHERE name=?"; SQLiteStatement stmt = db.compileStatement(sql); stmt.bindString(1, userName); // 自动转义特殊字符
Q2:数据库版本升级时如何保留历史数据?
A2:在onUpgrade()
中根据版本号逐步迁移数据。
if (oldVersion < 2) { // 版本1升级到2:添加新字段 db.execSQL("ALTER TABLE users ADD COLUMN email TEXT"); } if (oldVersion < 3) { // 版本2升级到3:创建新表 db.execSQL("CREATE TABLE logs(...)"); }