外键定义中的sqlite失败未知列

时间:2012-01-04 16:58:06

标签: android sqlite

我在联系人列表应用程序上工作我需要做2个表因为我想要进行连接。我正在尝试在我的数据库中创建2个表但是在创建联系人test1表时出现了一些错误。这是错误我得到:

                 01-04 18:47:40.152: I/Database(8360): sqlite returned: error code = 1, msg = unknown column "idgrup" in foreign key definition
                  01-04 18:47:40.152: E/Database(8360): Failure 1 (unknown column "idgrup" in foreign key definition) on 0x123c38 when preparing 'CREATE TABLE contactTest1 (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL,phone TEXT NOT NULL,email TEXT NOT NULL,url TEXT NOT NULL,adresa TEXT NOT NULL,idgrupINTEGER NOT NULL ,FOREIGN KEY (idgrup) REFERENCES contactTest2 (_id));'.
                  01-04 18:47:40.230: E/SQLiteOpenHelper(8360): Couldn't open contactsdataase.db for writing (will try read-only):
                  01-04 18:47:40.230: E/SQLiteOpenHelper(8360): android.database.sqlite.SQLiteException: unknown column "idgrup" in foreign key definition: CREATE TABLE contactTest1 (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL,phone TEXT NOT NULL,email TEXT NOT NULL,url TEXT NOT NULL,adresa TEXT NOT NULL,idgrupINTEGER NOT NULL ,FOREIGN KEY (idgrup) REFERENCES contactTest2 (_id));
                 01-04 18:47:40.230: E/SQLiteOpenHelper(8360):  at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at org.example.dbcontactconsole.DbCreate.onCreate(DbCreate.java:24)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at org.example.dbcontactconsole.DbContactConsole.getContacts(DbContactConsole.java:203)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at org.example.dbcontactconsole.DbContactConsole.showDatabaseContent(DbContactConsole.java:214)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at org.example.dbcontactconsole.DbContactConsole.onCreate(DbContactConsole.java:44)
                 01-04 18:47:40.230: E/SQLiteOpenHelper(8360):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
                  01-04 18:47:40.230: E/SQLiteOpenHelper(8360):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at android.os.Handler.dispatchMessage(Handler.java:99)
                 01-04 18:47:40.230: E/SQLiteOpenHelper(8360):  at android.os.Looper.loop(Looper.java:123)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at android.app.ActivityThread.main(ActivityThread.java:4627)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at java.lang.reflect.Method.invokeNative(Native Method)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at java.lang.reflect.Method.invoke(Method.java:521)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
                01-04 18:47:40.230: E/SQLiteOpenHelper(8360):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
               01-04 18:47:40.230: E/SQLiteOpenHelper(8360):    at dalvik.system.NativeStart.main(Native Method)

这里我创建了数据库:

  public class DbCreate extends SQLiteOpenHelper{
private static final String DB_NAME = "contactsdataase.db";
private static final int DB_VERSION = 2;

/** Create a helper object for the Events database */
   public DbCreate(Context context) { 
      super(context, DB_NAME, null,DB_VERSION); 
   }

   @Override
   public void onCreate(SQLiteDatabase db) { 
       db.execSQL("CREATE TABLE " + DbConstants.TABLE_NUME + " " +
                "(" + DbConstants.Group_ID + " INTEGER PRIMARY KEY , " + 
                      DbConstants.GROUP_NAME+");");
       db.execSQL("CREATE TABLE " + DbConstants.TABLE_NAME + " " +
                "(" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                      DbConstants.NAME + " TEXT NOT NULL," + 
                      DbConstants.PHONE + " TEXT NOT NULL," +
                      DbConstants.EMAIL + " TEXT NOT NULL," +
                      DbConstants.URL_STRING+ " TEXT NOT NULL,"+
                      DbConstants.ADRESS+ " TEXT NOT NULL,"+
                      DbConstants.Grupid+ "INTEGER NOT NULL ,FOREIGN KEY ("+DbConstants.Grupid+") REFERENCES "+DbConstants.TABLE_NUME+" ("+DbConstants.Group_ID+"));");

   }

   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, 
         int newVersion) {
      db.execSQL("DROP TABLE IF EXISTS " + DbConstants.TABLE_NUME);
      db.execSQL("DROP TABLE IF EXISTS " + DbConstants.TABLE_NAME);
      onCreate(db);
   }

1 个答案:

答案 0 :(得分:2)

SQL脚本中的

idgrupINTEGER搞乱了该列的定义。你应该有一个空格。

代码:

DbConstants.Grupid+ " INTEGER NOT NULL ...