2017-06-21 11 views
0

私は本とストア用の2つのテーブルを作成しています。Store_IDを与えることでBookStoreテーブルの各ブックをStoreTableにリンクしたいと考えています。 そのStore_IdはStoreTableのプライマリキーになります。私は外部キーの構文に問題があります。私はhttp://www.sqlite.org/foreignkeys.htmlを参考にしていますが、十分な説明がありませんでした。誰か助けてくれれば幸いです。SQLiteの外部キー

public class DatabaseHelper extends SQLiteOpenHelper{ 


//Name of databases 
public static final String DATABASE_NAME = "Library.db"; 
//Version of database 
public static final int DATABASE_VERSION = 1; 

//Table of Stores 
public static final String STORE_TABLE = "Store_Table"; 
public static final String STORE_ID = "Store_ID"; 
public static final String STORE_NAME = "Store_name"; 
public static final String STORE_Address = "Store_Address"; 
public static final String STORE_LAT = "lat"; 
public static final String STORE_LNG = "lng"; 

//Table of Books 
public static final String BOOKS_TABLE = "Books_Table"; 
public static final String BOOK_ID = "Book_ID"; 
public static final String BOOK_NAME = "Book_name"; 
public static final String BOOK_AUTHOR = "Book_Author"; 
public static final String BOOKStore = "BookStore_ID"; 

//Creating Stores Table 
private static final String SQL_CREATE_TABLE_STORE = "CREATE TABLE " + STORE_TABLE + "(" 
     + STORE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + STORE_NAME + " TEXT NOT NULL, " 
     + STORE_Address + " TEXT NOT NULL, " 
     + STORE_LAT + " TEXT NOT NULL, " 
     + STORE_LNG + " TEXT NOT NULL" 
     +");"; 
//Creating Books Table 
private static final String SQL_CREATE_TABLE_BOOKS = "CREATE TABLE " + BOOKS_TABLE + "(" 
     + BOOK_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + BOOK_NAME + " TEXT NOT NULL, " 
     + BOOK_AUTHOR + " TEXT NOT NULL, " 
//How to relate BookStore with Store_ID here? 
     +FOREIGN KEY(BOOKStore) REFERENCES STORE_TABLE(STORE_ID)); 
     +");"; 



public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    SQLiteDatabase db = this.getWritableDatabase(); 
} 

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 

    sqLiteDatabase.execSQL(SQL_CREATE_TABLE_STORE); 
    sqLiteDatabase.execSQL(SQL_CREATE_TABLE_BOOKS); 

} 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 

    //Clear all data 
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + STORE_TABLE); 
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + BOOKS_TABLE); 

    //RECREAT THE TABLES 
    onCreate(sqLiteDatabase); 

} 
} 

答えて

0

これは正解です:それはすべての変数とすべてのキーワードの「シンボルを解決できません」と言う

private static final String SQL_CREATE_TABLE_BOOKS = "CREATE TABLE " + BOOKS_TABLE + "(" 
     + BOOK_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + BOOK_NAME + " TEXT NOT NULL, " 
     + BOOK_AUTHOR + " TEXT NOT NULL, " 
//How to relate BookStore with Store_ID here? 
     + " FOREIGN KEY ("+ BOOKStore +") REFERENCES "+STORE_TABLE+"("+STORE_ID+"));"; 
1

私はBooks_TableためCREATE TABLEステートメントを使用して複数の問題を参照してください。まず、表の列を外部キーとして指定する場合、その列が最初に存在する必要があります。外部キーを定義するときにBookStore_ID列を参照していましたが、実際にこの列を定義したことはありません。第2に、列を外部キーとしてマークする場合は、特定の構文があります。詳細は以下を参照してください。

CREATE TABLE Books_Table (
    Book_ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    Book_name TEXT NOT NULL, 
    Book_Author TEXT NOT NULL, 
    BookStore_ID INTEGER, 
    CONSTRAINT fk_bookstore FOREIGN KEY (BookStore_ID) 
     REFERENCES Store_Table(Store_ID) 
); 
+0

。 –

+0

Javaコードに問題があります。この生のSQL文はエラーなしで実行する必要があります。 –

+0

これは、任意のエラーを示さなかった ' (プライベート静的最終文字列SQL_CREATE_TABLE_BOOKS = "CREATE TABLE" を+ BOOKS_TABLE + 「(Book_ID INTEGER PRIMARY KEY AUTOINCREMENT、BOOK_NAMEのTEXT、著者:BOOK_AUTHORのTEXT、BookStore_ID INTEGER)、FOREIGN KEY fk_bookstore CONSTRAINT(BookStore_ID )\ n "+ " REFERENCES Store_Table(Store_ID) ";) ' –

関連する問題