3

Android アプリで SQLite データベースをいじり始めたところです。「チーム」テーブルと「プレーヤー」テーブルを作成しようとしていますが、「プレーヤー」テーブルには、「チーム」テーブルの自動インクリメント _ID フィールドを参照する外部キーが必要です (この _ID フィールドは私の契約クラスに BaseColumns を実装することから来ています)。構文は正しいと思っていましたが、次のエラーが表示されます (アプリをアンインストールして再インストールした後でも)

06-08 20:26:22.763: E/Database(29843): Failure 1 (near "playerName": syntax error) on 0x22a110 when preparing 'CREATE TABLE player (_id INTEGER PRIMARY KEY,team_ID INTEGER, FOREIGN KEY(team_ID) REFERENCES team(_id), playerName TEXT,playerAge INTEGER,playerPosition TEXT,playerHeight REAL,playerWeight REAL,playerPhoto TEXT,playerNumber INTEGER)'.

上記のエラーは、通過しようとしてしまう SQL ステートメントを示しています。これは、SQL ステートメントを作成するためのコードです (不必要に冗長で申し訳ありません。私はチュートリアルに従っていました)。

private static final String SQL_CREATE_ENTRIES = "CREATE TABLE "
        + TeamTable.TABLE_NAME + " (" + TeamTable._ID
        + " INTEGER PRIMARY KEY," + TeamTable.COLUMN_NAME_TEAM_NAME
        + TEXT_TYPE + COMMA_SEP + TeamTable.COLUMN_NAME_TEAM_WINS
        + TEXT_TYPE + COMMA_SEP + TeamTable.COLUMN_NAME_TEAM_LOSSES
        + TEXT_TYPE + COMMA_SEP + TeamTable.COLUMN_NAME_TEAM_LOGO
        + TEXT_TYPE + " )";

private static final String SQL_CREATE_ENTRIES_2 = "CREATE TABLE "
        + PlayerTable.TABLE_NAME + " (" + PlayerTable._ID
        + " INTEGER PRIMARY KEY," + "team_ID INTEGER, "
        + "FOREIGN KEY(team_ID) REFERENCES team(_id), "
        + PlayerTable.COLUMN_NAME_PLAYER_NAME + TEXT_TYPE + COMMA_SEP
        + PlayerTable.COLUMN_NAME_PLAYER_AGE + " INTEGER" + COMMA_SEP
        + PlayerTable.COLUMN_NAME_PLAYER_POSITION + TEXT_TYPE + COMMA_SEP
        + PlayerTable.COLUMN_NAME_PLAYER_HEIGHT + " REAL" + COMMA_SEP
        + PlayerTable.COLUMN_NAME_PLAYER_WEIGHT + " REAL" + COMMA_SEP
        + PlayerTable.COLUMN_NAME_PLAYER_PHOTO + TEXT_TYPE + COMMA_SEP
        + PlayerTable.COLUMN_NAME_PLAYER_NUMBER + " INTEGER" + ")";

次に、とを使用するexecSQL(SQL_CREATE_ENTRIES)execSQL(SQL_CREATE_ENTRIES_2、エラーが表示されます。「チーム」テーブルのみを作成しようとしましたが、うまくいくようです。「チーム」テーブルから一部のデータを読み取り、その値を TextView に表示することさえできます。しかし、「プレイヤー」テーブルが導入されると、物事は機能しなくなります。私はおそらく非常に明白なものを見逃していますが、それを見つけることができないようです。

どんな助けでも大歓迎です!

4

1 に答える 1

5

最初にすべての列を宣言FOREIGN KEY(team_ID) REFERENCES team(_id)し、最後の列の後に配置します。

したがって、最後のクエリは次のようになります

CREATE TABLE player
(_id INTEGER PRIMARY KEY,
team_ID INTEGER, 
playerName TEXT,
playerAge INTEGER,
playerPosition TEXT,
playerHeight REAL,
playerWeight REAL,
playerPhoto TEXT,
playerNumber INTEGER,
FOREIGN KEY(team_ID) REFERENCES team(_id));
于 2013-06-09T01:12:01.997 に答える