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

安卓开发之用数据库的增删改查

环境搭建与准备

在安卓中使用SQLite数据库,需通过SQLiteOpenHelper管理数据库创建与版本控制。

添加依赖

无需额外依赖,android.database.sqlite包已内置支持。

创建数据库帮助类

public class DBHelper extends SQLiteOpenHelper {
    private static final String NAME = "app.db"; // 数据库名称
    private static final int VERSION = 1;        // 版本号
    public DBHelper(Context context) {
        super(context, NAME, null, VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表(users表)
        String sql = "CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)";
        db.execSQL(sql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级逻辑(删除旧表并创建新表)
        db.execSQL("DROP TABLE IF EXISTS users");
        onCreate(db);
    }
}

增删改查操作实现

增(Insert)

SQL语句: INSERT INTO table_name (column1, column2) VALUES (?, ?)
代码示例:

DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase(); // 获取可写数据库
ContentValues values = new ContentValues();
values.put("name", "Alice");
values.put("age", 25);
long rowId = db.insert("users", null, values); // 插入数据
db.close();

删(Delete)

SQL语句: DELETE FROM table_name WHERE condition
代码示例:

安卓开发之用数据库的增删改查  第1张

DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
int affected = db.delete("users", "age > ?", new String[]{"30"}); // 删除年龄大于30的记录
db.close();

改(Update)

SQL语句: UPDATE table_name SET column1 = ? WHERE condition
代码示例:

DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("age", 26);
int affected = db.update("users", values, "name = ?", new String[]{"Alice"}); // 更新Alice的年龄
db.close();

查(Select)

SQL语句: SELECT FROM table_name WHERE condition
代码示例:

DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase(); // 获取只读数据库
Cursor cursor = db.rawQuery("SELECT  FROM users WHERE age < ?", new String[]{"30"});
while (cursor.moveToNext()) {
    int id = cursor.getInt(cursor.getColumnIndex("id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    int age = cursor.getInt(cursor.getColumnIndex("age"));
    // 处理数据...
}
cursor.close();
db.close();

常用操作对比表

操作类型 SQL语句示例 关键API方法 适用场景
INSERT INTO users (name) VALUES (?) insert() 添加新数据
DELETE FROM users WHERE id = ? delete() 删除指定条件数据
UPDATE users SET age = ? WHERE name = ? update() 更新符合条件的数据
SELECT FROM users rawQuery()query() 读取数据

注意事项

  1. 线程安全:
    SQLiteDatabase实例非线程安全,建议每个线程独立获取数据库实例,或通过synchronized同步访问。

  2. 数据库升级:
    修改表结构时需更新VERSION,并在onUpgrade()中处理数据迁移逻辑。

  3. 防止SQL注入:
    使用参数化查询(如占位符),避免直接拼接字符串。


问题与解答

问题1:如何迁移数据库表结构?

解答:

  1. 增加VERSION版本号(如从1改为2)。
  2. onUpgrade()中执行迁移逻辑,
    db.execSQL("ALTER TABLE users ADD COLUMN email TEXT"); // 添加新列
  3. 重新运行应用,系统会自动调用onUpgrade()

问题2:能否使用第三方库简化操作?

解答:
可以使用Room持久化库,它提供编译时校验和抽象层,简化SQLite操作。

@Entity(tableName = "users")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    public String name;
    public int age;
}
0