当前位置:首页 > 行业动态 > 正文

安卓如何向数据库中插入数据

安卓插入数据需创建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注入,代码更简洁。

安卓如何向数据库中插入数据  第1张

示例代码:

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(可通过AsyncTaskThread处理)。
事务管理 批量插入时使用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"); // 添加新列
    }
    // 其他版本升级逻辑
}
0