2012-05-29 25 views
0

我想建立一個數據庫使用21個表,每個綁定約束。我已經在PHPmyAdmin中實現了數據庫,然後下載結構腳本以導入到我的Android SQLite數據庫中。Android - 關係數據庫SQLite與多個表

但我想知道在Android中使用多個表構建關係數據庫以及如何創建它們的良好實踐。

目前我有一個類實施SQLiteOpenHelper:

public class SqlSig extends SQLiteOpenHelper { 

@Override 
public void onCreate(SQLiteDatabase db) { 
    for(int i = 0; i != ConfigBDD.requetes.length; i++){ 
     db.execSQL(ConfigBDD.requetes[i]); 
    } 
} 
} 

ConfigBDD.requetes [I]獲得一個包含表創建請求和約束請求的字符串數組。此代碼不能在所有的工作,和logcat的顯示錯誤與PRIMARY KEY指令:

05-29 15:13:51.992: E/Database(8187): Failure 1 (near "KEY": syntax error) on 0x15c4b8 
when preparing 'CREATE TABLE IF NOT EXISTS `arret` (`id` int(11) NOT NULL , `id_externe` 
varchar(10) DEFAULT NULL, `id_pid` int(11) NOT NULL, `nom` varchar(50) NOT NULL, 
`description` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `id_pid` (`id_pid`)) 
DEFAULT CHARSET=utf8 =1 ;'. 

我敢肯定還有其他的方法來創建這個數據庫,但沒有發現有關多表的Android SQLite的任何解釋創建數據庫...

+0

錯誤很明顯 - 你的SQL語法不正確。 PRIMARY KEY後面的KEY條目是什麼?嘗試刪除。這應該是一個外國關鍵? – duffymo

+0

它怎麼可能是不正確的,它是由phpmyadmin自動生成的,它完全可以在web上下文中重新創建基礎。我的問題也是關於創建數據庫的良好實踐,不僅僅是一個奇怪的語法錯誤 – ZarkDev

+2

** PHPmyAdmin ** ..不是用於管理* MySQL * - 它不是很可能您的表格將乾淨地導入SQLite如果是這樣的話。 – Jens

回答

5

您:

CREATE TABLE IF NOT EXISTS `arret` ( 
    `id` int(11) NOT NULL , 
    `id_externe` varchar(10) DEFAULT NULL, 
    `id_pid` int(11) NOT NULL, 
    `nom` varchar(50) NOT NULL, 
    `description` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `id_pid` (`id_pid`)) 
DEFAULT CHARSET=utf8 =1 ; 

或許應該是這個樣子,如果你希望它在SQLite的工作。

CREATE TABLE IF NOT EXISTS arret ( 
    id INTEGER PRIMARY KEY NOT NULL , 
    id_externe TEXT DEFAULT NULL, 
    id_pid INTEGER NOT NULL, 
    nom TEXT NOT NULL, 
    description TEXT 
); 

接着是CREATE INDEXid_pid這是什麼KEY意味着在MySQL。