-2
@Override
public void onCreate(SQLiteDatabase db) {
    final String CREATE_IMAGE_TABLE = "CREATE TABLE " + TABLE_IMG + "("
            + KEY_ID + " INTEGER PRIMARY KEY autoincrement," + KEY_IMAGE_NAME + " TEXT,"
            + KEY_PATH + " TEXT" + ")";


    final String CREATE_TAG_TABLE = "CREATE TABLE " + TABLE_TAG + "("
            + KEY_ID + " INTEGER PRIMARY KEY autoincrement," + KEY_TAG_NAME + " TEXT,"
            + KEY_TAG_DATE + " INTEGER" + ")";



   final String CREATE_IMGTAG_TABLE = "CREATE TABLE " + TABLE_IMAGE_TAG + "("  + TAG_ID            + " TEXT REFERENCES TABLE_TAG (tag_id)," + IMG_ID + " TEXT REFERENCES TABLE_IMG (img_id),"
                + KEY_ID + " INTEGER, " + "INTEGER PRIMARY KEY(IMG_ID,TAG_ID,KEY_ID)" + ")";



    db.execSQL(CREATE_IMAGE_TABLE);
    db.execSQL(CREATE_TAG_TABLE);
    db.execSQL(CREATE_IMAGE_TAG_TABLE);

    Log.i("TAG", "TABLES CREATED" + CREATE_IMAGE_TAG_TABLE);
}

皆さんこんにちは

画像データ、タグデータ、および画像のIDとタグデータを含む3つのテーブルを作成しようとしています。画像テーブルの Id とタグ テーブルの Id の参照を使用して 3 番目のテーブルを作成します。これらは両方とも独自のテーブルの主キーです。これらのテーブルの id の値を 3 番目のテーブルに追加したい場合、上記のようにクエリを実行しましたが、作成できません。それは私に構文エラーを与えます:

09-10 14:52:13.741: E/Database(9850): Failure 1 (near "(": syntax error) on 0x223a80 when preparing 'CREATE TABLE img_tag_table(tag_id TEXT REFERENCES TABLE_TAG (tag_id),img_id TEXT REFERENCES TABLE_IMG (img_id),id INTEGER, INTEGER PRIMARY KEY(IMG_ID,TAG_ID,KEY_ID))'.
4

2 に答える 2

0

このような意味だったと思います。

final String CREATE_IMAGE_TAG_TABLE = "CREATE TABLE " + TABLE_IMAGE_TAG + "("
            + IMAGE_ID + " INTEGER REFERENCES " +  TABLE_IMG + "(id)," + TAG_ID + " INTEGER REFERENCES " + TABLE_TAG + "(id),"
            + IMG_TAG + " PRIMARY KEY (IMAGE_ID, TAG_ID) " + ")";
于 2013-09-09T08:07:21.720 に答える
0

img_tag PRIMARY KEY (IMAGE_ID, TAG_ID)

この列指定により、 で構文エラーが発生し(ます。何を達成しようとしていますか?

ペアを一意/主キーにしたい場合はIMAGE_ID, TAG_ID、テーブル制約に変更するだけです

PRIMARY KEY (IMAGE_ID, TAG_ID)

あなたのコードで:

final String CREATE_IMAGE_TAG_TABLE = "CREATE TABLE " + TABLE_IMAGE_TAG + "("
        + IMAGE_ID + " INTEGER REFERENCES CREATE_IMAGE_TABLE(id)," + TAG_ID + " INTEGER REFERENCES CREATE_TAG_TABLE(id),"
        + " PRIMARY KEY (IMAGE_ID, TAG_ID) " + ")";

編集した質問の後、問題は次のとおりです。

INTEGER PRIMARY KEY(IMG_ID,TAG_ID,KEY_ID)

これは、列の指定でもテーブルの制約でもありません。テーブル制約にするには、INTEGER(上記のコード) を削除します。INTEGER PRIMARY KEY列を作成するには、 のようなものに変更しcolumnname INTEGER PRIMARY KEYます。

于 2013-09-09T08:10:04.460 に答える