【问题标题】:SQLite One-to-Many Relationship Set/Get Foreign KeySQLite 一对多关系设置/获取外键
【发布时间】:2014-08-05 15:05:15
【问题描述】:

我正在使用 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 将 id 列表编码为 String,但这只是一个死胡同。

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

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

【问题讨论】:

  • "select distinct " + KEY_COLUMN_FORMATS + " from " + TABLE_ORDER?
  • 通常“多面”对“单面”有一个外键,所以我认为“TABLE_FORMATS”应该有一个“TABLE_ORDER”的外键。
  • 刚刚有一个关联......我想这只是一些查询并用光标加载它,但它不会回答如何创建这种关系(getMethod)。

标签: java android sqlite one-to-many


【解决方案1】:

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

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

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

SELECT * FROM Formats WHERE OrderID = ?

在 Jave 中:

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();

【讨论】:

  • 如何保存具有一对多关系的对象?
  • 您插入了一堆具有适当值的表行。 Java/Android 本身没有内置的帮助器。
  • 我的 Patient 类与 Foto 类是一对多的关系,我的创建看起来像这样:db.execSQL("create table paciente(_id integer primary key autoincrement, nome varchar(50), cpf varchar(11), data varchar(15) )"); db.execSQL("create table fotos(_id integer primary key autoincrement, enviado int(2), fotoBitmap BLOB, pacieent_id INTEGER, FOREIGN KEY(fk_pacienteId) REFERENCES paciente(_id))");
  • 内容值是什么样的? ContentValues values = new ContentValues(); values.put("nome", paciente.getNome()); values.put("cpf", paciente.getCpf()); values.put("data", paciente.getData()); values.put("foto",imageInBytes); long result = banco.insert("paciente", null, values); if(result == -1){ return 0; }else{ return result; }
  • 我是 sqlite 的新手,我很难在论坛中找到帮助,因为除了使这种关系一对多之外,在照片类中,我需要保存一张照片列表被应用程序捕获。你能帮帮我吗?
猜你喜欢
  • 2015-02-14
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多