【问题标题】:Android SQLite foreign key help needed?需要 Android SQLite 外键帮助?
【发布时间】:2011-09-29 07:01:49
【问题描述】:

// 处理程序

private static final String SCRIPT_CREATE_DATABASE = "create table " + MYDATABASE_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " + KEY_CONTENT1 + " text not null);";

private static final String SCRIPT_CREATE_DATABASE2 = "create table " + MYDATABASE_TABLE2 + " (" + KEY_ID2 + " integer foreign key autoincrement, " + KEY_CONTENT2 + " text not null, " + KEY_CONTENT3 + " text not null);";

任何想法我可能做错了什么?

// 错误日志

> 09-29 11:54:40.052: INFO/Database(484): sqlite returned: error

代码 =

1,味精=接近“外国”:语法错误09-29 11:54:40.052: 错误/数据库(484):失败1(靠近“外国”:语法错误) 0x217ba8 准备时'create table MY_TABLE2 (_id2 integer 外国的 键自动增量,Content2 文本不为空,Content3 文本不 空值);'。 09-29 11:54:40.062: 调试/AndroidRuntime(484): 关闭虚拟机 09-29 11:54:40.062: WARN/dalvikvm(484): threadid=1: 线程退出 和 未捕获的异常(组=0x4001d800)09-29 11:54:40.082: 错误/AndroidRuntime(484):致命异常:主要 09-29 11:54:40.082: 错误/AndroidRuntime(484): java.lang.RuntimeException: 无法 开始 活动组件信息{sep.com/sep.com.SepActivity}: android.database.sqlite.SQLiteException:靠近“外国”:语法 错误: 创建表 MY_TABLE2(_id2 整数外键自增, Content2 文本不为空,Content3 文本不为空); 09-29 11:54:40.082: 错误/AndroidRuntime(484):在

android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 09-29 11:54:40.082: 错误/AndroidRuntime(484): 在

android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 09-29 11:54:40.082: 错误/AndroidRuntime(484): 在 android.app.ActivityThread.access$2300(ActivityThread.java:125) 09-29 11:54:40.082:错误/AndroidRuntime(484):在

android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 09-29 11:54:40.082: 错误/AndroidRuntime(484): 在 android.os.Handler.dispatchMessage(Handler.java:99) 09-29 11:54:40.082:错误/AndroidRuntime(484):在 android.os.Looper.loop(Looper.java:123) 09-29 11:54:40.082: 错误/AndroidRuntime(484):在 android.app.ActivityThread.main(ActivityThread.java:4627) 09-29 11:54:40.082:错误/AndroidRuntime(484):在 java.lang.reflect.Method.invokeNative(Native Method) 09-29 11:54:40.082:错误/AndroidRuntime(484):在 java.lang.reflect.Method.invoke(Method.java:521) 09-29 11:54:40.082: 错误/AndroidRuntime(484):在

com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 09-29 11:54:40.082: 错误/AndroidRuntime(484): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 09-29 11:54:40.082:错误/AndroidRuntime(484):在 dalvik.system.NativeStart.main(Native Method) 09-29 11:54:40.082: 错误/AndroidRuntime(484):由以下原因引起: android.database.sqlite.SQLiteException:靠近“外国”:语法 错误: 创建表 MY_TABLE2(_id2 整数外键自增, Content2 文本不为空,Content3 文本不为空); 09-29 11:54:40.082: 错误/AndroidRuntime(484):在 android.database.sqlite.SQLiteDatabase.native_execSQL(Native 方法) 09-29 11:54:40.082: 错误/AndroidRuntime(484): 在

android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727) 09-29 11:54:40.082: 错误/AndroidRuntime(484): 在 sep.com.handle$SQLiteHelper.onCreate(handle.java:104) 09-29 11:54:40.082:错误/AndroidRuntime(484):在

android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106) 09-29 11:54:40.082: 错误/AndroidRuntime(484): 在 sep.com.handle.openToWrite(handle.java:44) 09-29 11:54:40.082: 错误/AndroidRuntime(484):在 sep.com.SepActivity.onCreate(SepActivity.java:38) 09-29 11:54:40.082: 错误/AndroidRuntime(484):在

android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 09-29 11:54:40.082: 错误/AndroidRuntime(484): 在

android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 09-29 11:54:40.082: 错误/AndroidRuntime(484): ... 11 更多

【问题讨论】:

    标签: android sqlite


    【解决方案1】:
    // Creating tables
    private static final String SCRIPT_CREATE_DATABASE = "create table " + MYDATABASE_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " + KEY_CONTENT1 + " text not null);";
    
    private static final String SCRIPT_CREATE_DATABASE2 = "create table " + MYDATABASE_TABLE2 + " (" + KEY_ID2 + " integer autoincrement, " + KEY_CONTENT2 + " text not null, " + KEY_CONTENT3 + " text not null, FOREIGN KEY ("+KEY_ID2+") REFERENCES "+PARENT_TABLE+" ("+PARENT_TABLE_PRIMARY+"));";
    

    外键有引用

    【讨论】:

    • 09-29 13:38:37.121:错误/数据库(276):在准备“创建表 MY_TABLE2(_id 整数自动增量,Content2 文本)时 0x218e00 上的失败 1(接近“自动增量”:语法错误)不为空,Content3 文本不为空,+ FOREIGN KEY (_id) REFERENCES MY_TABLE (_id));'。 当我更改代码时出现此错误。
    【解决方案2】:

    试试这个... String CREATE_MATCH = "如果不存在则创建表"+ TABLE_MATCH + "(" + MatchID +“整数主键自动增量” + MatchTeamA + " 整数参考 "+TABLE_TEAM+","
    + MatchTeamB + " INTEGER REFERENCES "+TABLE_TEAM+")";

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2017-08-03
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多