2012-01-04 1 views
0

Iam은 연락처 목록 응용 프로그램에서 작업하고 있습니다. 왜냐하면 내가 조인하고 싶기 때문에 2 테이블을해야합니다. 데이터베이스에 2 개의 테이블을 만들려고하는데 연락처를 만들 때 약간의 오류가 발생합니다.sqlite 실패 알 수없는 외래 키 정의 열

여기
    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) 

내가 데이터베이스를 만들 : 당신의 SQL 스크립트

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); 
    } 

답변

2

idgrupINTEGER 그 컬럼의 정의를 어지럽히 TEST1 table.This은 내가 오류입니다. 사이에 공간이 있어야합니다.

코드 :

DbConstants.Grupid+ " INTEGER NOT NULL ...