У меня 3 таблицыSQLite исключение ограничений первичный ключ должен быть уникальным
Таблица 1: Член - Для того, чтобы хранить каждую информацию об участнике,
Атрибут: MemberUsername (ПК), MemberPassword
Таблица 2 : MSgroup - Для того, чтобы хранить каждый зарегистрированный группу
Атрибут: GroupID (ПК), ИмяГруппы, GroupDescription
Таблица 3: MsGroupDet Айыл - К списку магазина каждого пользователя в каждой группе
Атрибут: GroupID (PK, FK), MemberUsername (PK, FK)
Мой запрос для создания, что 3 таблицы:
db.execSQL("CREATE TABLE IF NOT EXISTS " + MS_MEMBER + " ("
+ MEMBER_USERNAME + " TEXT PRIMARY KEY NOT NULL, "
+ MEMBER_PASSWORD + " TEXT NOT NULL, " + MEMBER_EMAIL
+ " TEXT NOT NULL" + ");");
db.execSQL("CREATE TABLE IF NOT EXISTS " + MS_GROUP + " ("
+ GROUP_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ GROUP_NAME + " TEXT NOT NULL, " + GROUP_DESCRIPTION
+ " TEXT NOT NULL);");
db.execSQL("CREATE TABLE IF NOT EXISTS " + MS_GROUP_DETAIL + " ("
+ GROUP_ID + " INTEGER PRIMARY KEY, " + MEMBER_USERNAME
+ " TEXT, FOREIGN KEY (" + MEMBER_USERNAME
+ ") REFERENCES " + MS_MEMBER + "(" + MEMBER_USERNAME
+ "), FOREIGN KEY (" + GROUP_ID + ") REFERENCES "
+ MS_GROUP + "(" + GROUP_ID + "));");
I успешно создать код для создания члена, создать группу, но проблема в том, что я не смог создать запрос для приглашения/добавления нового члена в группу (не удалось вставить в MsGroupDetail)
Это синтаксис добавления GroupMember
public void addGroupMember(String groupId, String username) {
// TODO Auto-generated method stub
ContentValues cv2 = new ContentValues();
cv2.put(GROUP_ID, groupId);
cv2.put(MEMBER_USERNAME, username);
ourDatabase.insert(MS_GROUP_DETAIL, null, cv2);
}
И это синтаксис, чтобы увидеть список моих групп
public String[] fetchGroupName(String username) {
int i = 0;
String Query = "SELECT " + GROUP_NAME + " From " + MS_GROUP
+ " a INNER JOIN " + MS_GROUP_DETAIL + " b ON a." + GROUP_ID
+ "=b." + GROUP_ID + " WHERE " + MEMBER_USERNAME + "=?";
Cursor c = ourDatabase.rawQuery(Query, new String[] { username });
String groupName[] = new String[c.getCount()];
int iGroupName = c.getColumnIndex(GROUP_NAME);
c.moveToFirst();
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
groupName[i] = c.getString(iGroupName);
i++;
}
c.close();
return groupName;
}
Everytime I пригласить новый член/добавление к MsGroupDetail таблице, я не смог вставить его в MsGroupDetail и журнал кот сказал: «SQLite Constraint Exception, первичный ключ должен быть уникальным»
* пь: Мой MsGroupDetail еще раз, чтобы перечислить всех членов в группе,
Я испытал ту же концепцию в Sql Stu Management Server, dio 2008 и он работал, я не знаю никакой лучшей концепции, чем то, что я закодировал выше,
Можете ли вы, ребята, сказать мне, есть ли какое-либо решение для этого?
Большое спасибо ..
Является ли «_id» всегда основным ключом на каждом столе? –
Если '_id' никогда не используется, нет необходимости добавлять его в первую очередь. –
@JuliusLeo Некоторые компоненты Android (например, виды списка) требуют определенных столбцов с именем '_id'. Однако вы не будете использовать такой запрос для * этой * таблицы, и когда вы показываете список, например, групп, вы всегда можете переименовать столбец 'GROUP_ID' в' _id' при запросе. –