上一篇
安卓开发之数据库基本语句
- 行业动态
- 2025-04-22
- 4150
安卓开发之数据库基本语句
数据库操作基础
安卓中通常使用 SQLite 数据库,通过 SQLiteDatabase
类进行操作,常见操作包括:创建表、增删改查(CRUD)。
创建表
- SQL 语句
CREATE TABLE table_name ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER );
- 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"}); | 删除符合条件的所有记录。 |
常用函数与操作
替换(Replace)
如果主键存在则更新,否则插入。db.replace("user", null, values);
事务处理
批量操作时使用事务提高效率。db.beginTransaction(); try { // 多条数据库操作 db.setTransactionSuccessful(); } finally { db.endTransaction(); }
注意事项
- 主键自增
定义主键为INTEGER PRIMARY KEY AUTOINCREMENT
,插入时无需指定主键值。 - 防止 SQL 注入
使用 占位符和参数数组,避免直接拼接字符串。 - 关闭资源
操作完成后需关闭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(); }