SQLite 一对多关系设置/获取外键

问题描述 投票:0回答:1

我正在使用 SQLite DB 构建一个 Android 应用程序项目。

我陷入了一对多关系。

这是一个

private static final String createTableOrders =
        "CREATE TABLE " + TABLE_ORDER + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                ...
                + KEY_COLUMN_FORMATS + " INTEGER REFERENCES " + TABLE_FORMATS + "(" + KEY_ID + ")"
                + ");";

这个很多

private static final String createTableFormats =
        "CREATE TABLE " + TABLE_FORMATS + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                  ...
                + ");";

我的问题是 set/get 方法。 假设我需要获取一个订单中所有格式的 id 列表。 我想 set 方法也是如此。

我试图在SO上找到这类问题,但大多数问题只是针对SQL部分。

附注我花了 3 个小时尝试自己制作,但我唯一能做的就是使用 GSON 将 ids 列表编码为 String,但这只是一个死胡同。

编辑:我需要在代码中获取该信息。

P.S.S 我已经这样做了 18 个小时,如果这是一个超级愚蠢的问题,我很抱歉。

java android sqlite one-to-many
1个回答
14
投票

一对多关系需要“多”表中的外键列:

在 SQL 中:

CREATE TABLE Orders (
    ID PRIMARY KEY
);
CREATE TABLE Formats (
    ID PRIMARY KEY,
    OrderID REFERENCES Orders(ID)
);

要获取属于订单的所有格式,您只需查找具有该订单 ID 的行:

SELECT * FROM Formats WHERE OrderID = ?

在爪哇中:

Cursor cursor = db.query(TABLE_FORMATS,
                         new String[] { whatever columns you need },
                         "OrderID = " + orderID,
                         null, null, null, null, null);
while (cursor.moveToNext()) {
    // read one order from the cursor
}
cursor.close();
© www.soinside.com 2019 - 2024. All rights reserved.