Android 在SQlite中创建外键时出错

Android 在SQlite中创建外键时出错,android,sqlite,foreign-keys,android-sqlite,Android,Sqlite,Foreign Keys,Android Sqlite,我正在尝试创建以下表格,但无法找出出现此错误的原因 04-10 22:30:15.373 32592-32592/com.bluetask E/SQLiteLog: (1) unknown column "rem_id" in foreign key definition 从代码中可以看出,我按照正确的顺序创建了表。 我在添加外键约束之前创建列 如果您能给我任何提示,我将不胜感激 public static final String DATABASE_NAME = "bluetask.db";

我正在尝试创建以下表格,但无法找出出现此错误的原因

04-10 22:30:15.373 32592-32592/com.bluetask E/SQLiteLog: (1) unknown column "rem_id" in foreign key definition
从代码中可以看出,我按照正确的顺序创建了表。
我在添加外键约束之前创建列

如果您能给我任何提示,我将不胜感激

public static final String DATABASE_NAME = "bluetask.db";
private static final int DATABASE_VERSION = 2;

public static final String TABLE_REMINDERS = "reminders";
public static final String TABLE_REMINDERPOSITIONS = "rem_pos";
public static final String TABLE_POSITIONS = "positions";
public static final String REMINDERS_COLUMN_REM_ID = "rem_id";
public static final String REMINDERS_COLUMN_DATE = "date";
public static final String REMINDERS_COLUMN_NAME = "name";
public static final String REMINDERS_COLUMN_DESCR = "description";
public static final String REMINDERS_COLUMN_DONE = "done";
public static final String REMINDERPOSITIONS_COLUMN_REM_ID = "rem_id";
public static final String REMINDERPOSITIONS_COLUMN_POS_ID = "pos_id";
public static final String POSITIONS_COLUMN_POS_ID = "pos_id";
public static final String POSITIONS_COLUMN_POS_TITLE = "pos_title";
public static final String POSITIONS_COLUMN_STREET = "street";
public static final String POSITIONS_COLUMN_STR_NUM = "str_num";
public static final String POSITIONS_COLUMN_ZIP = "zip";
public static final String POSITIONS_COLUMN_CITY = "city";
public static final String POSITIONS_COLUMN_GEO_DATA = "geo_data";

private static final String CREATE_TABLE_REMINDERS =
        "CREATE TABLE " + TABLE_REMINDERS + "("
            + REMINDERS_COLUMN_REM_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + REMINDERS_COLUMN_NAME + " TEXT NOT NULL, "
            + REMINDERS_COLUMN_DESCR + " TEXT NOT NULL, "
            + REMINDERS_COLUMN_DATE + " INTEGER NOT NULL, "
            + REMINDERS_COLUMN_DONE + " INTEGER NOT NULL"
            + ");";
private static final String CREATE_TABLE_POSITIONS =
        "CREATE TABLE " + TABLE_POSITIONS + "("
            + POSITIONS_COLUMN_POS_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + POSITIONS_COLUMN_POS_TITLE + " TEXT NOT NULL, "
            + POSITIONS_COLUMN_CITY + " TEXT, "
            + POSITIONS_COLUMN_ZIP + "INTEGER, "
            + POSITIONS_COLUMN_STREET + " TEXT, "
            + POSITIONS_COLUMN_STR_NUM + " TEXT, "
            + POSITIONS_COLUMN_GEO_DATA + " TEXT NOT NULL"
            + ");";
private static final String CREATE_TABLE_REMINDERPOSITIONS =
        "CREATE TABLE " + TABLE_REMINDERPOSITIONS + "("
            + REMINDERPOSITIONS_COLUMN_REM_ID + "INTEGER, "
            + REMINDERPOSITIONS_COLUMN_POS_ID + "INTEGER, "
            + "FOREIGN KEY (" + REMINDERPOSITIONS_COLUMN_REM_ID + ") REFERENCES " + TABLE_REMINDERS + "(" + REMINDERS_COLUMN_REM_ID + "), "
            + "FOREIGN KEY (" + REMINDERPOSITIONS_COLUMN_POS_ID + ") REFERENCES " + TABLE_POSITIONS + "(" + POSITIONS_COLUMN_POS_ID + "), "
            + "PRIMARY KEY (" + REMINDERPOSITIONS_COLUMN_REM_ID + ", " + REMINDERPOSITIONS_COLUMN_POS_ID + ")"
            + ");";

public BlueTaskSQLiteOpenHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase database){
    database.execSQL(CREATE_TABLE_REMINDERS);
    database.execSQL(CREATE_TABLE_POSITIONS);
    database.execSQL(CREATE_TABLE_REMINDERPOSITIONS);
}
这是最后的结果:

04-10 22:30:15.373 32592-32592/com.bluetask E/SQLiteLog: (1) unknown column "rem_id" in foreign key definition
04-10 22:30:15.392 32592-32592/com.bluetask D/AndroidRuntime: Shutting down VM
04-10 22:30:15.393 32592-32592/com.bluetask E/AndroidRuntime: FATAL EXCEPTION: main
                                                          Process: com.bluetask, PID: 32592
                                                          java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bluetask/com.bluetask.AddReminderActivity}: android.database.sqlite.SQLiteException: unknown column "rem_id" in foreign key definition (code 1): , while compiling: CREATE TABLE rem_pos(rem_idINTEGER, pos_idINTEGER, FOREIGN KEY (rem_id) REFERENCES reminders(rem_id), FOREIGN KEY (pos_id) REFERENCES positions(pos_id), PRIMARY KEY (rem_id, pos_id));
                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                              at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                              at android.os.Looper.loop(Looper.java:148)
                                                              at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                           Caused by: android.database.sqlite.SQLiteException: unknown column "rem_id" in foreign key definition (code 1): , while compiling: CREATE TABLE rem_pos(rem_idINTEGER, pos_idINTEGER, FOREIGN KEY (rem_id) REFERENCES reminders(rem_id), FOREIGN KEY (pos_id) REFERENCES positions(pos_id), PRIMARY KEY (rem_id, pos_id));
                                                              at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                              at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
                                                              at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
                                                              at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                              at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                              at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                              at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
                                                              at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
                                                              at com.bluetask.database.BlueTaskSQLiteOpenHelper.onCreate(BlueTaskSQLiteOpenHelper.java:70)
                                                              at com.bluetask.database.BlueTaskSQLiteOpenHelper.onUpgrade(BlueTaskSQLiteOpenHelper.java:79)
                                                              at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:256)
                                                              at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                                                              at com.bluetask.database.BlueTaskDataSource.open(BlueTaskDataSource.java:28)
                                                              at com.bluetask.AddReminderActivity.onCreate(AddReminderActivity.java:34)
                                                              at android.app.Activity.performCreate(Activity.java:6251)
                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                              at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                              at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                              at android.os.Looper.loop(Looper.java:148) 
                                                              at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                              at java.lang.reflect.Method.invoke(Native Method) 
                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
04-10 22:30:15.373 32592-32592/com.bluetask E/SQLiteLog:(1)外键定义中的未知列“rem_id”
04-10 22:30:15.392 32592-32592/com.bluetask D/AndroidRuntime:关闭虚拟机
04-10 22:30:15.393 32592-32592/com.bluetask E/AndroidRuntime:致命异常:main
进程:com.bluetask,PID:32592
java.lang.RuntimeException:无法启动activity ComponentInfo{com.bluetask/com.bluetask.AddReminderActivity}:android.database.sqlite.SQLiteException:外键定义(代码1)中的未知列“rem_id”:编译时:创建表rem_pos(rem_iditeger,pos_iditeger,外键(rem_id)引用提醒(rem_id),外键(pos_id)引用位置(pos_id),主键(rem_id,pos_id));
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
位于android.app.ActivityThread.-wrap11(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:5417)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
导致原因:android.database.sqlite.SQLiteException:外键定义(代码1)中的未知列“rem_id”:编译时:创建表rem_pos(rem_iditeger,pos_iditeger,外键(rem_id)引用提醒(rem_id),外键(pos_id)引用位置(pos_id),主键(rem_id,pos_id));
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
位于android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
位于android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
位于com.bluetask.database.bluetasksqliteonphelper.onCreate(bluetasksqliteonphelper.java:70)
位于com.bluetask.database.bluetasksqliteonphelper.onUpgrade(bluetasksqliteonphelper.java:79)
位于android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:256)
位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
位于com.bluetask.database.bluetaskdasource.open(bluetaskdasource.java:28)
在com.bluetask.addemendorActivity.onCreate上(addemendorActivity.java:34)
位于android.app.Activity.performCreate(Activity.java:6251)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
位于android.app.ActivityThread.-wrap11(ActivityThread.java)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:54
+ POSITIONS_COLUMN_ZIP + " INTEGER, "
+ REMINDERPOSITIONS_COLUMN_REM_ID + " INTEGER, "
+ REMINDERPOSITIONS_COLUMN_POS_ID + " INTEGER, "
private static final String CREATE_TABLE_REMINDERPOSITIONS =
        "CREATE TABLE " + TABLE_REMINDERPOSITIONS + "("
            + REMINDERPOSITIONS_COLUMN_REM_ID + "INTEGER, "
            + REMINDERPOSITIONS_COLUMN_POS_ID + "INTEGER, "
            + "FOREIGN KEY (" + REMINDERPOSITIONS_COLUMN_REM_ID + ") REFERENCES " + TABLE_REMINDERS + "(" + REMINDERS_COLUMN_REM_ID + "), "
            + "FOREIGN KEY (" + REMINDERPOSITIONS_COLUMN_POS_ID + ") REFERENCES " + TABLE_POSITIONS + "(" + POSITIONS_COLUMN_POS_ID + "), "
            + "PRIMARY KEY (" + REMINDERPOSITIONS_COLUMN_REM_ID + ", " + REMINDERPOSITIONS_COLUMN_POS_ID + ")"
            + ");";
private static final String CREATE_TABLE_REMINDERPOSITIONS =
        "CREATE TABLE " + TABLE_REMINDERPOSITIONS + "("
            + REMINDERPOSITIONS_COLUMN_REM_ID + " INTEGER, "
            + REMINDERPOSITIONS_COLUMN_POS_ID + " INTEGER, "
            + "FOREIGN KEY (" + REMINDERPOSITIONS_COLUMN_REM_ID + ") REFERENCES " + TABLE_REMINDERS + "(" + REMINDERS_COLUMN_REM_ID + "), "
            + "FOREIGN KEY (" + REMINDERPOSITIONS_COLUMN_POS_ID + ") REFERENCES " + TABLE_POSITIONS + "(" + POSITIONS_COLUMN_POS_ID + "), "
            + "PRIMARY KEY (" + REMINDERPOSITIONS_COLUMN_REM_ID + ", " + REMINDERPOSITIONS_COLUMN_POS_ID + ")"
            + ");";