Android SQLite 连表查询

在 Android 开发中,SQLite 是一种使用广泛的轻量级数据库。它适合于存储结构化数据,并且有着良好的性能。很多时候,我们需要从多个表中获取数据,这就需要用到连表查询(JOIN)。本文将通过实例来介绍如何在 Android 中使用 SQLite 进行连表查询。

SQLite 基础

首先,我们需要了解 SQLite 的基本操作。在 Android 中,我们使用 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 createUsersTable = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)";
        String createOrdersTable = "CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER, product TEXT)";
        db.execSQL(createUsersTable);
        db.execSQL(createOrdersTable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS orders");
        db.execSQL("DROP TABLE IF EXISTS users");
        onCreate(db);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

在上述代码中,我们创建了两个表:usersorders,分别用于存储用户信息和订单信息。

连表查询

示例业务场景

假设我们希望获取每个用户及其对应的订单信息。我们可以使用 INNER JOIN 进行连表查询。以下是如何在 Android 中实现这一点的示例。

数据插入

在执行查询前,我们先插入一些示例数据:

public void insertSampleData() {
    SQLiteDatabase db = this.getWritableDatabase();
    
    // 插入用户
    db.execSQL("INSERT INTO users (name) VALUES ('Alice')");
    db.execSQL("INSERT INTO users (name) VALUES ('Bob')");

    // 插入订单
    db.execSQL("INSERT INTO orders (user_id, product) VALUES (1, 'Book')");
    db.execSQL("INSERT INTO orders (user_id, product) VALUES (1, 'Pen')");
    db.execSQL("INSERT INTO orders (user_id, product) VALUES (2, 'Notebook')");
    
    db.close();
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
进行连表查询

下面的实现将展示如何进行连表查询以获取用户及其订单信息:

public void getUserOrders() {
    SQLiteDatabase db = this.getReadableDatabase();
    String query = "SELECT users.name, orders.product FROM users " +
                   "INNER JOIN orders ON users.id = orders.user_id";
                   
    Cursor cursor = db.rawQuery(query, null);
    
    while (cursor.moveToNext()) {
        String userName = cursor.getString(0);
        String product = cursor.getString(1);
        Log.d("DB Result", "User: " + userName + ", Product: " + product);
    }
    
    cursor.close();
    db.close();
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

在这个查询中,我们通过 INNER JOINusers 表和 orders 表连接起来,仅返回那些在 orders 表中有记录的用户。

总结

在 Android SQLite 中,连表查询是获取关联数据的重要手段。通过适当的 SQL 语句,我们可以高效地从多个表中提取所需的数据。在实际开发中,这种灵活性允许我们处理复杂的业务逻辑,提供更好的用户体验。

类图

以下是上述数据库相关类的一个简单类图:

MyDatabaseHelper +String DATABASE_NAME +int DATABASE_VERSION +onCreate(SQLiteDatabase db) +onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) +insertSampleData() +getUserOrders()

通过本文所述的方法,你可以在 Android 项目中轻松实现 SQLite 的连表查询,进而处理复杂的数据关系。希望这对你有所帮助!