《第十一章 SQLite 数据库》

《第十一章 SQLite 数据库》

在 Android 开发中,SQLite 数据库是一种常用的数据存储方式,它为应用提供了本地的数据持久化和管理功能。本章将详细介绍 SQLite 数据库的相关知识,包括创建数据库与表、数据的增删改查操作以及数据库事务处理。

一、SQLite 数据库简介

SQLite 是一个轻量级的关系型数据库引擎,它被广泛应用于移动设备和嵌入式系统中。Android 系统内置了对 SQLite 数据库的支持,使得开发者可以方便地在应用中创建和操作数据库。

二、创建数据库与表

(一)创建数据库

在 Android 中,通常创建一个继承自 SQLiteOpenHelper 的类来管理数据库的创建和版本更新。

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "my_database.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) {
        // 创建表的 SQL 语句
        String createTableQuery = "CREATE TABLE IF NOT EXISTS users (" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "name TEXT," +
                "age INTEGER" +
                ");";
        db.execSQL(createTableQuery);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 处理数据库版本升级的逻辑
    }
}

在上述代码中,MyDatabaseHelper 类的构造函数接收一个 Context 对象,用于获取数据库文件的存储位置。onCreate 方法在数据库首次创建时被调用,用于执行创建表的操作。onUpgrade 方法用于处理数据库版本升级的情况。

(二)创建表

通过执行 SQL 语句来创建表。表的字段可以定义数据类型、约束等。

三、数据的增删改查操作

(一)插入数据

public void insertData(String name, int age) {
    SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("age", age);
    db.insert("users", null, values);
    db.close();
}

(二)查询数据

public Cursor queryData() {
    SQLiteDatabase db = myDatabaseHelper.getReadableDatabase();
    String[] columns = {"id", "name", "age"};
    Cursor cursor = db.query("users", columns, null, null, null, null, null);
    return cursor;
}

(三)更新数据

public void updateData(int id, String newName, int newAge) {
    SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", newName);
    values.put("age", newAge);
    db.update("users", values, "id =?", new String[]{String.valueOf(id)});
    db.close();
}

(四)删除数据

public void deleteData(int id) {
    SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
    db.delete("users", "id =?", new String[]{String.valueOf(id)});
    db.close();
}

四、数据库事务处理

事务是一组操作的集合,要么全部成功执行,要么全部失败回滚,以保证数据的一致性和完整性。

public void performTransaction() {
    SQLiteDatabase db = myDatabaseHelper.getWritableDatabase();
    db.beginTransaction();
    try {
        // 执行一系列数据库操作
        insertData("John", 25);
        updateData(1, "Jane", 30);
        db.setTransactionSuccessful();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        db.endTransaction();
    }
    db.close();
}

在上述代码中,使用 beginTransaction 方法开始事务,setTransactionSuccessful 方法标记事务成功,endTransaction 方法结束事务。如果在事务执行过程中没有调用 setTransactionSuccessful ,则事务会自动回滚。

五、优化与注意事项

  1. 索引优化
    为经常用于查询、连接和排序的字段创建索引,可以提高查询效率。

  2. 批量操作
    对于大量的数据操作,尽量使用批量插入、更新和删除的方法,以减少数据库操作的次数。

  3. 避免过度查询
    只获取需要的字段和数据,避免不必要的查询开销。

  4. 数据库升级
    在数据库版本升级时,要谨慎处理数据的迁移和兼容性。

  5. 异常处理
    在数据库操作中,要妥善处理可能出现的异常,避免应用崩溃。

六、示例应用

下面通过一个简单的示例应用来展示 SQLite 数据库的综合运用:

public class MainActivity extends AppCompatActivity {

    private MyDatabaseHelper myDatabaseHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myDatabaseHelper = new MyDatabaseHelper(this);

        // 插入数据
        insertData("Alice", 20);
        insertData("Bob", 22);

        // 查询并打印数据
        Cursor cursor = queryData();
        if (cursor!= null && cursor.moveToFirst()) {
            do {
                int id = cursor.getInt(cursor.getColumnIndex("id"));
                String name = cursor.getString(cursor.getColumnIndex("name"));
                int age = cursor.getInt(cursor.getColumnIndex("age"));
                System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
            } while (cursor.moveToNext());
            cursor.close();
        }

        // 更新数据
        updateData(1, "Charlie", 25);

        // 删除数据
        deleteData(2);
    }

    private void insertData(String name, int age) {
        // 插入数据的实现
    }

    private Cursor queryData() {
        // 查询数据的实现
    }

    private void updateData(int id, String newName, int newAge) {
        // 更新数据的实现
    }

    private void deleteData(int id) {
        // 删除数据的实现
    }
}

七、总结

SQLite 数据库在 Android 应用开发中扮演着重要的角色,掌握其创建、操作和优化的方法对于处理应用中的数据存储和管理至关重要。通过合理地设计数据库结构、运用事务处理以及注意性能优化,可以开发出高效、稳定的 Android 应用。

希望通过本章的学习,大家对 Android 中的 SQLite 数据库有了更深入的理解和掌握,能够在实际开发中灵活运用数据库技术,为应用提供可靠的数据支持。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值