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 に表示することさえできます。しかし、「プレイヤー」テーブルが導入されると、物事は機能しなくなります。私はおそらく非常に明白なものを見逃していますが、それを見つけることができないようです。
どんな助けでも大歓迎です!