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

安卓开发之数据库基本语句

安卓开发之数据库基本语句

数据库操作基础

安卓中通常使用 SQLite 数据库,通过 SQLiteDatabase 类进行操作,常见操作包括:创建表、增删改查(CRUD)。

创建表

  1. SQL 语句
    CREATE TABLE table_name (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name TEXT NOT NULL,
        age INTEGER
    );
  2. Android 代码实现
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("CREATE TABLE IF NOT EXISTS user (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER);");

增删改查(CRUD)操作

操作类型 SQL 语句 Android 代码示例 说明
新增(Create) INSERT INTO table_name (column1, column2) VALUES (?, ?); java<br>ContentValues values = new ContentValues();<br>values.put("name", "Alice");<br>values.put("age", 25);<br>db.insert("user", null, values); | 使用 ContentValues 构建参数,防止 SQL 注入。
查询(Read) SELECT FROM table_name WHERE condition; java<br>Cursor cursor = db.query(<br> "user",<br> new String[]{"_id", "name", "age"},<br> "age > ?",<br> new String[]{"20"},<br> null, null, null); | 使用 Cursor 遍历结果,注意关闭资源。
更新(Update) UPDATE table_name SET column1 = ? WHERE condition; java<br>ContentValues values = new ContentValues();<br>values.put("age", 26);<br>db.update("user", values, "name = ?", new String[]{"Alice"}); 仅更新满足条件的记录。
删除(Delete) DELETE FROM table_name WHERE condition; java<br>db.delete("user", "age < ?", new String[]{"20"}); 删除符合条件的所有记录。

常用函数与操作

  1. 替换(Replace)
    如果主键存在则更新,否则插入。

    db.replace("user", null, values);
  2. 事务处理
    批量操作时使用事务提高效率。

    安卓开发之数据库基本语句  第1张

    db.beginTransaction();
    try {
        // 多条数据库操作
        db.setTransactionSuccessful();
    } finally {
        db.endTransaction();
    }

注意事项

  1. 主键自增
    定义主键为 INTEGER PRIMARY KEY AUTOINCREMENT,插入时无需指定主键值。
  2. 防止 SQL 注入
    使用 占位符和参数数组,避免直接拼接字符串。
  3. 关闭资源
    操作完成后需关闭 Cursor 和数据库连接。

    cursor.close();
    db.close();

相关问题与解答

问题1:如何防止 SQL 注入攻击?

解答
永远不要直接拼接用户输入到 SQL 语句中,使用参数化查询,

String sql = "SELECT  FROM user WHERE name = ?";
Cursor cursor = db.rawQuery(sql, new String[]{userInputName});

会被安全替换为参数数组中的值,避免反面代码注入。


问题2:什么时候需要使用事务?

解答
当需要执行多条数据库操作且要求原子性时(即所有操作成功或全部失败),使用事务。

  • 转账操作(扣钱和加钱必须同时成功)。
  • 批量插入数据。
    示例:

    db.beginTransaction();
    try {
      for (User user : userList) {
          ContentValues values = new ContentValues();
          values.put("name", user.getName());
          values.put("age", user.getAge());
          db.insert("user", null, values);
      }
      db.setTransactionSuccessful();
    } catch (Exception e) {
      // 回滚事务
    } finally {
      db.endTransaction();
    }
0