导入 SQLite 库: 在 Android 项目中使用 SQLite,首先需要导入 SQLite 库。这通常通过 Gradle 构建文件完成。在 build.gradle
文件中添加以下依赖
implementation 'androidx.sqlite:sqlite:2.2.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.3.1' // 如果使用 Room 数据库
基本操作
- 创建数据库:
在Android中,可以使用SQLiteOpenHelper类来创建数据库。当调用SQLiteOpenHelper的getWritableDatabase()方法时,如果数据库不存在,则会创建一个新的数据库。
SQLiteOpenHelper openHelper = new SQLiteOpenHelper(context, "database_name", null, 1);
SQLiteDatabase database = openHelper.getWritableDatabase();
- 创建表:
通过调用SQLiteDatabase的execSQL()方法,可以执行SQL语句来创建表。例如,下面是一个创建名为“users”的表的示例:
String createTableQuery = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)";
database.execSQL(createTableQuery);
- 插入数据:
可以使用SQLiteDatabase的insert()方法来插入数据。例如,下面是一个向“users”表中插入一条数据的示例:
ContentValues values = new ContentValues();
values.put("name", "John");
values.put("age", 25);
long insertId = database.insert("users", null, values);
- 查询数据:
可以使用SQLiteDatabase的query()方法或rawQuery()方法来执行查询。例如,下面是一个从“users”表中获取所有数据的示例:
Cursor cursor = database.query("users", null, null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String name = cursor.getString(1);
int age = cursor.getInt(2);
// process the data
}
cursor.close();
- 更新数据:
可以使用SQLiteDatabase的update()方法来更新数据。例如,下面是一个将id为1的用户年龄更改为30的示例:
ContentValues values = new ContentValues();
values.put("age", 30);
int updatedRows = database.update("users", values, "id = ?", new String[] { "1" });
- 删除数据:
可以使用SQLiteDatabase的delete()方法来删除数据。例如,下面是一个删除id为1的用户的示例:
int deletedRows = database.delete("users", "id = ?", new String[] { "1" });
- 数据库版本管理:
在SQLiteOpenHelper类中,可以指定数据库的版本号。当升级应用程序时,可以增加版本号并更新数据库模式。如果新版本与旧版本不兼容,则可以通过onUpgrade()方法来执行必要的操作。
这些是在安卓开发中使用SQLite数据库的一些基本知识点。通过掌握这些知识,你可以在应用程序中轻松地创建、操作和管理SQLite数据库。
SQLite事务
SQLite 事务是一组数据库操作,它们要么全部成功执行,要么全部失败回滚,以保持数据的完整性和一致性。在 Android 开发中,了解如何使用事务对数据库进行操作是非常重要的。以下是有关 SQLite 事务的相关知识:
1. 开始事务: 在 SQLite 中,使用 beginTransaction()
方法来开始一个事务。例如:
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction();
2. 设置事务成功: 如果在事务中的所有操作都成功执行,你可以使用 setTransactionSuccessful()
来标记事务成功。如果在标记成功之后发生回滚或异常,事务将被撤销。
db.setTransactionSuccessful();
3. 结束事务: 使用 endTransaction()
方法来结束事务。如果没有调用 setTransactionSuccessful()
,事务将自动回滚。
db.endTransaction();
4. 事务回滚: 如果在事务中发生错误或需要撤销操作,可以使用 endTransaction()
来回滚事务。没有调用 setTransactionSuccessful()
的事务将自动回滚。
db.endTransaction(); // 回滚事务
5. 事务嵌套: SQLite 支持嵌套事务。如果在一个事务内开启另一个事务,必须在外部事务成功后才会提交内部事务。如果外部事务回滚,内部事务也会被回滚。
6. 性能优化: 使用事务可以提高数据库操作的性能,因为它们减少了磁盘写入和锁的次数。在批量插入大量数据时,将插入操作包装在事务内会显著提高性能。
7. 异常处理: 在处理数据库操作过程中,应该捕获可能发生的异常,并在必要时回滚事务。例如:
try {
db.beginTransaction();
// 执行数据库操作
db.setTransactionSuccessful();
} catch (Exception e) {
// 处理异常
} finally {
db.endTransaction();
}
8. 自动事务(begin 和 end): 在使用 query()
、insert()
、update()
和 delete()
等方法时,SQLiteOpenHelper 和 SQLiteDatabase 会自动为每个方法调用开始和结束一个事务。这意味着你不必手动管理事务,但需要注意每个操作都会独立成为一个事务。
9. 使用事务的场景: 事务通常在以下情况下使用:
- 插入、更新、删除多条记录时,以提高性能。
- 多个数据库操作需要原子性,要么全部执行成功,要么全部失败。
总之,SQLite 事务是保证数据库操作原子性和数据完整性的重要机制。在 Android 开发中,使用事务可以提高数据库操作的性能和稳定性。确保在必要的时候开始、结束和回滚事务,以保持数据库的一致性。