私はAndroid SQLiteデータベース内で外部キーを機能させようとしました。次の構文を試しましたが、強制的に近くなります:
private static final String TASK_TABLE_CREATE = "create table "
+ TASK_TABLE + " (" + TASK_ID
+ " integer primary key autoincrement, " + TASK_TITLE
+ " text not null, " + TASK_NOTES + " text not null, "
+ TASK_DATE_TIME + " text not null, FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+" ("+CAT_ID+"));";
私が間違っている可能性のあるアイデアはありますか?他のテーブル構造を表示する必要がある場合は、IDと名前を持つ2番目のテーブルの非常に単純な構造を見ることができます。
編集:
エラーは次のとおりです。
03-13 13:42:35.389:エラー/ AndroidRuntime(312):原因:Android.database.sqlite.SQLiteException:外部キー定義の不明な列 "taskCat":テーブルリマインダーの作成(_id整数主キーの自動インクリメント、task_titleテキストはありませんnull、null以外のテキスト、null以外のreminder_date_timeテキスト、外部キー(taskCat)REFERENCESカテゴリ(_id));
最初にTASK_CAT
列を定義してから、外部キーを設定する必要があります。
private static final String TASK_TABLE_CREATE = "create table "
+ TASK_TABLE + " ("
+ TASK_ID + " integer primary key autoincrement, "
+ TASK_TITLE + " text not null, "
+ TASK_NOTES + " text not null, "
+ TASK_DATE_TIME + " text not null,"
+ TASK_CAT + " integer,"
+ " FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+"("+CAT_ID+"));";
Sqlite外部キー doc で詳細を確認できます。
コメントできないので、@ jethroの回答に加えてこのメモを追加します。
Tableステートメントを作成する最後の部分としてFOREIGN KEY行も実行する必要があることがわかりました。そうしないと、アプリのインストール時に構文エラーが発生します。つまり、次のようなことはできません。
private static final String TASK_TABLE_CREATE = "create table "
+ TASK_TABLE + " (" + TASK_ID
+ " integer primary key autoincrement, " + TASK_TITLE
+ " text not null, " + TASK_NOTES + " text not null, "
+ TASK_CAT + " integer,"
+ " FOREIGN KEY ("+TASK_CAT+") REFERENCES "+CAT_TABLE+" ("+CAT_ID+"), "
+ TASK_DATE_TIME + " text not null);";
外部キー行の後にTASK_DATE_TIMEを配置した場所。
エラーの説明でわかるように、テーブルには列(_id、tast_title、notes、reminder_date_time)が含まれており、列「taskCat」から外部キーを追加しようとしていますが、テーブルには存在しません!