Android中的SQLite是一个轻量级的数据库管理系统,它内置在Android系统中,允许开发者在应用程序中存储和管理结构化数据。下面我将详细解释如何在Android中使用SQLite进行数据库操作,包括创建数据库、升级数据库、添加数据、更新数据、删除数据、查询数据和事务的使用。
1. 创建数据库
在Android中,你通常不需要直接创建SQLite数据库文件,因为当你首次使用SQLiteOpenHelper
的子类时,如果数据库不存在,它会自动创建。SQLiteOpenHelper
是一个辅助类,它管理数据库的创建和版本。
public class MyDatabaseHelper extends SQLiteOpenHelper { | |
private static final String DATABASE_NAME = "MyDatabase.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 createTableQuery = "CREATE TABLE MyTable (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)"; | |
db.execSQL(createTableQuery); | |
} | |
// ... 其他方法 ... | |
} |
2. 升级数据库
当你想更改数据库结构(例如添加新表或修改现有表)时,你需要增加DATABASE_VERSION
的值,并在onUpgrade
方法中编写升级逻辑。
@Override | |
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { | |
// 在这里编写升级逻辑 | |
// 例如,删除旧表并创建新表 | |
db.execSQL("DROP TABLE IF EXISTS MyTable"); | |
onCreate(db); // 调用onCreate来创建新表 | |
} |
3. 添加数据
使用ContentValues
类将值放入表中。
SQLiteDatabase db = helper.getWritableDatabase(); | |
ContentValues values = new ContentValues(); | |
values.put("name", "John Doe"); | |
db.insert("MyTable", null, values); // 第一个参数是表名,第二个参数是可选的nullColumnHack,第三个参数是ContentValues对象 | |
db.close(); |
4. 更新数据
使用update
方法更新表中的行。
ContentValues values = new ContentValues(); | |
values.put("name", "Jane Doe"); | |
String whereClause = "id = ?"; | |
String[] whereArgs = new String[]{"1"}; // 假设我们要更新id为1的行 | |
db.update("MyTable", values, whereClause, whereArgs); |
5. 删除数据
使用delete
方法删除表中的行。
String whereClause = "id = ?"; | |
String[] whereArgs = new String[]{"1"}; // 假设我们要删除id为1的行 | |
db.delete("MyTable", whereClause, whereArgs); |
6. 查询数据
使用query
方法或更简单的rawQuery
方法来查询数据。
Cursor cursor = db.query("MyTable", null, null, null, null, null, null); | |
while (cursor.moveToNext()) { | |
String name = cursor.getString(cursor.getColumnIndex("name")); | |
// 处理数据... | |
} | |
cursor.close(); |
或者使用rawQuery
:
Cursor cursor = db.rawQuery("SELECT * FROM MyTable", null); | |
// ... 同上处理数据 ... |
7. 事务的使用
在SQLite中,事务用于确保一系列数据库操作要么全部成功,要么全部失败(回滚)。这对于保持数据的完整性非常有用。
db.beginTransaction(); // 开始事务 | |
try { | |
// 在这里执行多个数据库操作... | |
db.setTransactionSuccessful(); // 如果所有操作都成功,标记事务为成功 | |
} finally { | |
db.endTransaction(); // 结束事务,如果未调用setTransactionSuccessful(),则回滚事务 | |
} |
注意
- 始终确保在操作完数据库后关闭它,以释放资源。
- 在多线程环境中使用数据库时,请确保线程安全。可以使用
SQLiteDatabase.enableWriteAheadLogging(true)
来提高并发写入的性能,但请注意它可能会增加数据库文件的大小。