2012-03-06 65 views
0

我想在這裏做一些簡單的事情,但我的數據庫和SQL知識充其量是生鏽的。 我正在按照教程here,現在正在嘗試創建自己的連接表。在Android上的SQLite簡單連接表

爲了更簡單地解釋一下,配置文件具有小部件,小部件可以是多種類型。 小工具表包含一個id,一個名稱和一個字符串widget_type。對於每個控件類型,該widget_type都會有另一個表格。

所以

       Profile 
           | 
           | 
           | 
           Widget 
           | 
       |------------------|--------------------| 
      Widget1   Widget2    Widget3 

我在與被共享的Id的小部件之間的麻煩,使他們在所有3個部件表中的唯一部分。繼承人的SQL下面我有,但我不完全知道什麼,我試圖做的是叫做或者如果可以從內部的SQLite

private static final String PROFILE_DATABASE_CREATE = "create table " 
      + TABLE_PROFILES + "(" + COLUMN_ID 
      + " integer primary key autoincrement, " + PROFILE_COLUMN_NAME 
      + " text not null);"; 

// Widget creation SQL statement 
private static final String WIDGET_DATABASE_CREATE = "create table " 
      + TABLE_WIDGETS + "(" + COLUMN_ID +"integer primary key autoincrement" + WIDGET_COLUMN_TYPE +"text not null"; 
+0

宏已經在android代碼中定義。我不認爲他們有必要解決這個問題 – OVERTONE 2012-03-06 18:31:55

回答

0

的Urk來完成。很難做到這一點,以便Widget1中的ID與Widget2中的ID不同。

更簡單的方法是將所有表合併在一起。支持人員應用程序的聯繫人提供程序執行此操作。有一個表包含所有三種控件類型的數據。使用唯一的MIME類型區分特定窗口小部件類型的行。使用它所屬的配置文件的_ID值,它的窗口小部件類型的MIME類型及其數據,將它添加到表中來添加窗口小部件。

訣竅是給這個「通用小部件」表的任何類型的小部件所需的列的最大數量。爲任何小部件提供一些相同的列,然後提供一些通用列(如DATA1到DATA5),其內容根據小部件的類型而有所不同。然後分配給特定類型的常量,每個插件類型

例如,對於Widget的表你會創建這些列名常量

private static final String _ID = "_ID"; 
private static final String WIDGET_NAME = "name"; 
private static final String WIDGET_TYPE = "MIMEtype"; 

然後

private static final String WIDGET1_TYPE = "vnd.example.com/widget1"; 
private static final String WIDGET2_TYPE = "vnd.example.com/widget2"; 
private static final String WIDGET3_TYPE = "vnd.example.com/widget3"; 

private static final String SOME_WIDGET1_COLUMN = "DATA1"; 
private static final String SOME_OTHER_WIDGET2_COLUMN = "DATA2"; 

如果您檢索一行MIME類型「vnd.example.com/widget1」,然後使用「SOME_OTHER_WIDGET2_COLUMN」訪問遊標,那真的沒有關係,但如果您使用Widget1,則更容易跟蹤發生的情況Widget1遊標上的常量等。

如果您想知道android.provider的所有合同類都做了什麼,那麼就是這樣。

+0

每個具體類的單個表具有相同的問題嗎? – OVERTONE 2012-03-06 19:28:51

+0

假設我確實使用單表模式,那麼序列化窗口小部件類又該如何呢?然後根據widget表中的widget_type重新創建它。那會是比擁有一些空白和一些填充列更好的解決方案嗎? – OVERTONE 2012-03-06 19:30:39