2016-05-02 21 views
1

Imは4つのテーブルがあるデータベースを作成しようとしています{USERS,TOPICS,GROUPS,CREATED_TOPICS}。コンパイル中に、::私は構文エラー(コード1)外部キーANDROIDを持つdbテーブルを作成

...私は試してみて、それを実行すると、このエラーを取得しておくFOREIGNテーブル created_topics_table(CREATED_TOPIC_ID INTEGER PRIMARY KEY AUTOINCREMENT、TOPIC_ID INTEGER、USER_ID INTEGERを作成しますKEY(TOPIC_ID) REFERENCES topics_table(_ID)、FOREIGN KEY(USER_ID)は users_table(_ID)を参照。相続人

コード...

public class databaseHelper extends SQLiteOpenHelper 
{ 
//DATABASE NAME 
public static final String DATABASE_NAME = "users.db"; 
//USERS TABLE 
public static final String TABLE_NAME_USERS = "users_table"; 
public static final String COL_USER_ID = "_ID"; 
public static final String COL_USER_NAME = "USER_NAME"; 
public static final String COL_USER_EMAIL = "USER_EMAIL"; 
public static final String COL_USER_PASSWORD = "USER_PASSWORD"; 
//TOPICS TABLE 
public static final String TABLE_NAME_TOPICS = "topics_table"; 
public static final String COL_TOPIC_ID = "_ID"; 
public static final String COL_TOPIC_NAME = "TOPIC_NAME"; 


//GROUPS TABLE 
public static final String TABLE_NAME_GROUPS = "groups_table"; 
public static final String COL_GROUP_ID = "GROUP_ID"; 
public static final String COL_GROUP_NAME = "GROUP_NAME"; 

public static final String TABLE_NAME_CREATED_TOPICS = 
"created_topics_table"; 
public static final String COL_CREATED_TOPIC_ID = "CREATED_TOPIC_ID"; 
public static final String COL_FK_TOPIC_TOPIC_ID = "TOPIC_ID"; 
public static final String COL_FK_TOPIC_USER_ID = "USER_ID"; 

public void onCreate(SQLiteDatabase db) { 
db.execSQL("create table " + TABLE_NAME_USERS + " (_ID INTEGER PRIMARY KEY 
AUTOINCREMENT,USER_NAME TEXT,USER_EMAIL TEXT,USER_PASSWORD TEXT)"); 
db.execSQL("create table " + TABLE_NAME_TOPICS + " (_ID INTEGER PRIMARY KEY  
AUTOINCREMENT,TOPIC_NAME TEXT)"); 
db.execSQL("create table " + TABLE_NAME_GROUPS + " (GROUPS_ID INTEGER PRIMARY  
KEY AUTOINCREMENT,GROUP_NAME TEXT)"); 
db.execSQL("create table " + TABLE_NAME_CREATED_TOPICS + " (CREATED_TOPIC_ID 
INTEGER PRIMARY KEY AUTOINCREMENT, TOPIC_ID INTEGER,USER_ID INTEGER, FOREIGN 
KEY(TOPIC_ID) REFERENCES " +TABLE_NAME_TOPICS + "(_ID)," +                                        
"FOREIGN KEY(USER_ID) REFERENCES " +TABLE_NAME_USERS + "(_ID)"); 
} 
+0

? 'AUTOINCREMENT'を' AUTO_INCREMENT'にしてはいけませんか? –

+0

AUTOINCREMENTが動作し、アンダースコアの必要はありません。imはsqlite dbのbulitを使用しています – luke

答えて

4

あなたは最後に閉じ括弧を逃した:sqliteの外部キーに

create table created_topics_table (CREATED_TOPIC_ID INTEGER PRIMARY KEY AUTOINCREMENT, TOPIC_ID INTEGER,USER_ID INTEGER, FOREIGN KEY(TOPIC_ID) REFERENCES topics_table(_ID),FOREIGN KEY (USER_ID) REFERENCES users_table(_ID)) 

もう一つの注意を。デフォルトではオフになっています。あなたは"PRAGMA foreign_keys=ON"たびに使用する必要があります開いているデータベース接続

EDIT

変更:DBは、使用している

db.execSQL("create table " + TABLE_NAME_CREATED_TOPICS + " (CREATED_TOPIC_ID 
INTEGER PRIMARY KEY AUTOINCREMENT, TOPIC_ID INTEGER,USER_ID INTEGER, FOREIGN 
KEY (TOPIC_ID) REFERENCES " +TABLE_NAME_TOPICS + " (_ID)," +                  
"FOREIGN KEY (USER_ID) REFERENCES " +TABLE_NAME_USERS + " (_ID))"); 
+0

PRAGMA foreign_keys = ONを設定するにはどうすればいいですか?私はシンボル 'PRAGMA'を解決できません...どのような例ですか? – luke

+2

db.execSQL( "PRAGMA foreign_keys = ON"); – Pooya

+0

すべてうまくいきましたが、テーブルからデータを表示するためにクエリを実行したときに、そのようなテーブルはありませんでした:TABLE_NAME_CREATED_TOPICS。何か案が?助けてくれてありがとう。 – luke

1

(_ID)topics_table FOREIGN KEY(TOPIC_ID)REFERENCES、FOREIGN KEY(USER_ID)

(CREATED_TOPIC_ID INTEGER PRIMARY KEY AUTOINCREMENT、TOPIC_ID INTEGER、USER_ID INTEGER、FOREIGN KEY(TOPIC_ID)REFERENCESの間にスペースを追加しますtopics_table(_ID)、FOREIGN KEY(USER_ID)参照users_table(_ID)

この希望があれば動作します。

関連する問題