0

这个问题已经被问过了,但我找不到类似的问题。

我必须上课:

public class Categorie {

// Attributs
private int identifiant;
private String libelle;

...
}

public class Restaurant {

// Attributs
private int identifiant;
private String nom;
private String description;
private List<Categorie> lesCategories;

...
}

但是对于SQLite,我不知道你如何使用 " lesCategories"..

我用法语阅读了本教程:

在 SQLite 中,该对象type不存在.. 只有String, Integer, Real, Blob.

更明确地说:我的光标有问题,它在这里 --> “????”:
因为,它不是 String 或 Int,而是对象..

public Restaurant ConvertCursorToObject(Cursor c) { Restaurant restaurant= new Restaurant ( c.getInt(EnseigneOpenHelper.NUM_RES_ID), c.getString(EnseigneOpenHelper.NUM_RES_NOM), c.getString(EnseigneOpenHelper.NUM_RES_DESCRIPtion), ????
); return restaurant; }

/** * 转换 Restaurant 中的光标 */

public Restaurant ConvertCursorToOneObject(Cursor c) { c.moveToFirst(); Restaurant restaurant = ConvertCursorToObject(c); c.close(); return restaurant ; }

4

1 回答 1

3

我假设您(不是)要问的问题是:如何将这两个类中包含的信息保存到关系数据库中。

您不能将对象保存在 SQL 数据库中(除非作为 BLOB),而且无论如何,这不是您应该在这里做的。您需要标准化您的数据。

您在这里需要的是三个表:

  1. 第一个表,称为Categorie;
  2. 第二个表称为Restaurant;
  3. 第三张桌子叫做RestaurantCategorie;

第三个表将仅包含两个字段:categorie_idrestaurant_id。每行将列出餐厅和类别的有效组合。该表将包含对应于属性的值lesCategories

以下是相关 SQL 的示例:

CREATE TABLE Categorie
( categorie_id  INTEGER PRIMARY KEY
, libelle       TEXT    NOT NULL
);

CREATE TABLE Restaurant
( restaurant_id INTEGER PRIMARY KEY
, nom           TEXT    NOT NULL
, description   TEXT
);

CREATE TABLE RestaurantCategorie
( restaurant_id INTEGER NOT NULL    REFERENCES Restaurant
, categorie_id  INTEGER NOT NULL    REFERENCES Categorie
, PRIMARY KEY (restaurant_id, categorie_id)
);

如果您想了解原因,您应该阅读关系数据库设计、数据建模的主题,尤其是:数据库规范化(最值得注意的是示例)。

你在 StackOverflow 上找不到这个的原因可能是因为这是使用 SQL 数据库时非常基本的东西。

于 2013-02-07T11:16:04.223 回答