上一篇
安卓如何向数据库中插入数据
- 行业动态
- 2025-04-23
- 3173
安卓插入数据需创建SQLiteOpenHelper子类,通过getWritableDatabase()获取实例,用ContentValues封装数据,调用insert()方法执行 插入
创建数据库与表结构
在安卓中操作SQLite数据库前,需通过SQLiteOpenHelper
创建或升级数据库,并定义表结构。
示例代码:
public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "app_data.db"; private static final int DATABASE_VERSION = 1; public MyDatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建表结构 String createTable = "CREATE TABLE users (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT NOT NULL," + "age INTEGER)"; db.execSQL(createTable); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 数据库升级逻辑(如表结构变更) db.execSQL("DROP TABLE IF EXISTS users"); onCreate(db); } }
插入数据的核心方法
方法1:使用ContentValues
(推荐)
优势:避免手动拼接SQL,防止SQL注入,代码更简洁。
示例代码:
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context); SQLiteDatabase db = dbHelper.getWritableDatabase(); // 获取可写数据库 ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("age", 25); long rowId = db.insert("users", null, values); // 返回新插入行的ID db.close(); // 关闭数据库连接
方法2:直接执行SQL语句
适用场景:需要动态拼接复杂SQL(如多表关联)。
示例代码:
SQLiteDatabase db = dbHelper.getWritableDatabase(); String sql = "INSERT INTO users (name, age) VALUES (?, ?)"; Object[] args = {"李四", 30}; db.execSQL(sql, args); // 占位符?会被args替换 db.close();
注意事项与最佳实践
注意点 | 说明 |
---|---|
主线程操作 | 数据库操作需在子线程执行,避免阻塞UI(可通过AsyncTask 或Thread 处理)。 |
事务管理 | 批量插入时使用beginTransaction() 和setTransactionSuccessful() 提高效率。 |
关闭资源 | 每次操作后调用db.close() 释放资源,防止内存泄漏。 |
数据校验 | 插入前检查字段合法性(如非空、类型匹配)。 |
完整插入流程示例
// 1. 初始化数据库帮助类 MyDatabaseHelper dbHelper = new MyDatabaseHelper(context); // 2. 开启子线程操作数据库 new Thread(() -> { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.beginTransaction(); // 开启事务 try { ContentValues values = new ContentValues(); values.put("name", "王五"); values.put("age", 28); db.insert("users", null, values); db.setTransactionSuccessful(); // 标记事务成功 } catch (Exception e) { e.printStackTrace(); } finally { db.endTransaction(); // 提交或回滚事务 db.close(); } }).start();
相关问题与解答
问题1:如何查询数据库中的数据?
解答:
使用SQLiteDatabase.query()
方法或Cursor
对象遍历结果。
Cursor cursor = db.query("users", null, "age > ?", new String[]{"20"}, null, null, null); while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex("name")); int age = cursor.getInt(cursor.getColumnIndex("age")); // 处理数据 } cursor.close(); // 必须关闭Cursor
问题2:数据库版本升级时如何保留旧数据?
解答:
在onUpgrade()
方法中,通过db.execSQL()
执行ALTER TABLE
或数据迁移脚本。
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 2) { db.execSQL("ALTER TABLE users ADD COLUMN email TEXT"); // 添加新列 } // 其他版本升级逻辑 }