SQLite介绍
SQLite 是一种轻量级的关系型数据库管理系统,它被设计为嵌入式数据库,不需要独立的服务器进程,可以直接访问存储在文件中的数据库。SQLite 在移动设备、嵌入式系统以及小型应用程序中被广泛使用,它具有简单、快速、可靠的特点。SQLite 使用 SQL 语言进行数据库操作,支持大部分标准的 SQL 语法。
在使用 SQLite 时,可以通过 SQL 语句来创建、查询、更新和删除数据库中的数据。同时,SQLite 也支持事务处理、触发器、视图等数据库特性,使得它在小型应用程序中也能满足一定的复杂需求。
Android中的SQLite是一种轻量级的关系型数据库管理系统,它被广泛用于Android应用程序中存储和管理数据。SQLite数据库以单个文件的形式存储在设备的内部存储器上,可以通过SQL语句进行数据的增删改查操作。
SQLite使用
SQLite是一种轻量级的关系型数据库管理系统,它被设计为嵌入式数据库,可以在各种操作系统上运行。SQLite的特点包括零配置、无服务器、支持事务等。它通常用于移动设备、嵌入式系统以及小型应用程序中。
通常要使用SQLite,需要通过以下步骤操作:
- 下载SQLite:可以从官方网站下载SQLite的最新版本,也可以通过包管理工具安装SQLite。
- 创建数据库:使用SQLite命令行工具或者SQLite的API来创建一个数据库文件。
- 连接数据库:通过命令行工具或者编程语言的API来连接到数据库。
- 执行SQL语句:使用SQL语句来创建表、插入数据、查询数据等操作。
- 断开连接:在完成操作后,记得断开与数据库的连接。
SQLite的SQL语句和常规的关系型数据库类似,但也有一些特有的语法和功能。在使用SQLite时,需要注意其特有的限制和特性,比如数据类型的灵活性和事务处理的支持等。
在Android开发中,可以使用SQLite作为本地数据库存储数据。以下是使用SQLite的基本步骤:
- 创建数据库:在SQLiteOpenHelper类中创建数据库,并定义表格结构和初始化数据。
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 1;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建表格
db.execSQL("CREATE TABLE IF NOT EXISTS mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);");
// 初始化数据
db.execSQL("INSERT INTO mytable (name) VALUES ('John');");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 升级数据库时的操作
}
}
- 执行数据库操作:使用SQLiteDatabase类执行数据库操作,如插入、更新、删除和查询数据。
DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 插入数据
ContentValues values = new ContentValues();
values.put("name", "Alice");
db.insert("mytable", null, values);
// 查询数据
Cursor cursor = db.query("mytable", new String[]{"_id", "name"}, null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
// 处理数据
}
// 关闭数据库连接
db.close();
- 注意事项:在使用SQLite时,需要注意线程安全、数据类型、SQL注入等安全性问题,以及数据库版本升级时的处理。
SQLite数据库升级
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 2;
// 构造函数
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// 创建表
@Override
public void onCreate(SQLiteDatabase db) {
String createTableQuery = "CREATE TABLE mytable (id INTEGER PRIMARY KEY, name TEXT)";
db.execSQL(createTableQuery);
}
// 升级数据库
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
// 添加新表
String createNewTableQuery = "CREATE TABLE newtable (id INTEGER PRIMARY KEY, age INTEGER)";
db.execSQL(createNewTableQuery);
}
if (oldVersion < 3) {
// 添加新字段
String addNewColumnQuery = "ALTER TABLE mytable ADD COLUMN email TEXT";
db.execSQL(addNewColumnQuery);
}
}
}
在上面的示例中,我们创建了一个名为mydatabase.db的数据库,并指定版本号为2。在onCreate方法中,我们创建了一个名为mytable的表。在onUpgrade方法中,我们检查旧版本号,如果旧版本号小于2,则添加一个名为newtable的新表;如果旧版本号小于3,则向mytable表中添加一个名为email的新字段。当你的应用程序升级时,数据库结构也会相应地进行升级。
SQLite事务操作
数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么全部成功执行,要么全部不执行。在数据库中,事务具有以下四个特性,通常称为ACID特性:
- 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部不执行,不存在部分执行的情况。
- 一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏,数据库从一个一致性状态转换到另一个一致性状态。
- 隔离性(Isolation):多个事务并发执行时,每个事务的操作对其他事务是隔离的,一个事务的中间结果不会被其他事务看到。
- 持久性(Durability):一旦事务提交,其所做的修改将会永久保存在数据库中,即使系统发生故障也不会丢失。
在数据库中,事务可以使用以下语法来控制:
BEGIN TRANSACTION; -- 开始事务
-- 执行一系列数据库操作
COMMIT; -- 提交事务
ROLLBACK; -- 回滚事务
在SQLite中,事务是一组数据库操作,这些操作要么全部成功执行,要么全部失败回滚。SQLite使用以下语句来控制事务:
- BEGIN TRANSACTION: 开始一个新的事务
- COMMIT: 提交事务,将所有操作永久保存到数据库
- ROLLBACK: 回滚事务,撤销自上次BEGIN TRANSACTION以来的所有操作
在SQLite中,默认情况下,每个SQL语句都被视为一个事务。如果要在一个事务中执行多个操作,可以使用BEGIN TRANSACTION开始事务,然后使用COMMIT提交事务,或者使用ROLLBACK回滚事务。
例如,要在SQLite中执行一个事务,可以按照以下格式编写SQL语句:
BEGIN TRANSACTION;
-- 执行一系列数据库操作
COMMIT;
在Android开发中,SQLite对于事物的操作如下:
// 开始事务
db.beginTransaction();
try {
// 执行数据库操作
// 插入数据
db.insert(TABLE_NAME, null, values);
// 更新数据
db.update(TABLE_NAME, values, whereClause, whereArgs);
// 删除数据
db.delete(TABLE_NAME, whereClause, whereArgs);
// 标记事务成功
db.setTransactionSuccessful();
} finally {
// 结束事务
db.endTransaction();
}
这样,如果在BEGIN TRANSACTION和COMMIT之间的操作中发生错误,整个事务将被回滚,数据库将不会受到影响。