【发布时间】:2018-06-12 12:52:50
【问题描述】:
我有 2 张桌子,一张是 Player 桌子,另一张是 Matches 桌子。我想让光标在我的 MatchCursorAdapter 中列出网球比赛。我通过在我需要在列表中显示的两个表中制作重复的列名称和玩家图片数据来管理这一点。现在我想以正确的方式做到这一点,只需在表格比赛中获得玩家的 id,并且通过玩家的 id,我可以获得他的名字和图片形式的玩家表。我尝试使用 INNER JOINER,但我需要 2 或 4 个玩家,所以我将有相同的列名我不知道如何处理这个以及如何从游标中检索数据。 Here is an image of my tables and cursor I want for more clarity 这是我的尝试,但仅适用于 1 个玩家,我需要全部 4 个:
case MATCHES:
SQLiteQueryBuilder mQueryBuilderMatches = new SQLiteQueryBuilder();
mQueryBuilderMatches.setTables(
PlayerContract.MatchEntry.TABLE_NAME + " INNER JOIN " +
PlayerContract.PlayerEntry.TABLE_NAME + " ON " +
PlayerContract.MatchEntry.TABLE_NAME + "." +
PlayerContract.MatchEntry.COLUMN_PLAYER_1_ID + " = " +
PlayerContract.PlayerEntry.TABLE_NAME + "." +
PlayerContract.PlayerEntry._ID);
cursor = mQueryBuilderMatches.query(database, projection, selection, selectionArgs, null, null, sortOrder);
break;
这是我创建表格的方法:
public void onCreate(SQLiteDatabase db) {
String SQL_CREATE_ENTRIES =
"CREATE TABLE " + PlayerEntry.TABLE_NAME + " (" +
PlayerEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
PlayerEntry.COLUMN_PLAYER_NAME + " TEXT NOT NULL, " +
PlayerEntry.COLUMN_PLAYER_NATIONALITY + " TEXT, " +
PlayerEntry.COLUMN_PLAYER_YEAR_BORN + " INTEGER NOT NULL DEFAULT 0, " +
PlayerEntry.COLUMN_PLAYER_GENDER + " INTEGER NOT NULL, " +
PlayerEntry.COLUMN_PLAYER_WEIGHT + " INTEGER NOT NULL DEFAULT 0, " +
PlayerEntry.COLUMN_PLAYER_HEIGHT + " INTEGER NOT NULL DEFAULT 0, " +
PlayerEntry.COLUMN_PLAYER_PICTURE + " BLOB);";
String SQL_CREATE_ENTRIES_MATCH =
"CREATE TABLE " + MatchEntry.TABLE_NAME + " (" +
MatchEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
MatchEntry.COLUMN_PLAYER_1_ID + " INTEGER, " +
MatchEntry.COLUMN_PLAYER_2_ID + " INTEGER, " +
MatchEntry.COLUMN_PLAYER_2_TEAM_1_ID + " INTEGER, " +
MatchEntry.COLUMN_PLAYER_2_TEAM_2_ID + " INTEGER, " +
MatchEntry.COLUMN_PLAYER_1_NAME + " TEXT, " +
MatchEntry.COLUMN_PLAYER_2_NAME + " TEXT, " +
MatchEntry.COLUMN_PLAYER_1_PICTURE + " BLOB, " +
MatchEntry.COLUMN_PLAYER_2_PICTURE + " BLOB, " +
MatchEntry.COLUMN_MATCH_ARRAY_LIST + " TEXT, " +
MatchEntry.COLUMN_MATCH_TIME + " TEXT, " +
MatchEntry.COLUMN_MATCH_DATE + " TEXT, " +
MatchEntry.COLUMN_MATCH_FINISH + " INTEGER);";
db.execSQL(SQL_CREATE_ENTRIES);
db.execSQL(SQL_CREATE_ENTRIES_MATCH);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL(DATABASE_ALTER_TEAM_1_PLAYER_2_ID);
db.execSQL(DATABASE_ALTER_TEAM_2_PLAYER_2_ID);
}
}
【问题讨论】: