2013-02-07 13 views
0

這個問題已被問到,但我找不到類似的問題。Android SQLite和一個類中的對象

我不得不類:

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」 ..

我已閱讀this tutorial在法國:

在SQLite的對象type不存在。只有String, Integer, Real, Blob.

對於更explicite: 我有我的光標的一個問題是在這裏 - >「????」:
因爲,它不是一個字符串或詮釋但對象..

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; }

/** *轉換光標在餐廳 */

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

+0

你想要做什麼?將數據從這個對象保存到Sqlite中? –

+1

如果要在一列中存儲多個值,請將其分解到後端的單獨表中,並僅存儲外鍵引用。我認爲你想要一個多值/複合屬性! –

+1

您需要針對您的問題提出具體問題,您想要什麼? – Tsunaze

回答

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

如果你想知道爲什麼,你應該做的關係數據庫設計,數據建模的主題一定的閱讀,更特別的是:database normalization(最特別是the examples)。

你在StackOverflow上找不到這個的原因可能是因爲這是使用SQL數據庫時非常基本的東西。