[英]sqlite constraint exception primary key must be unique
我有3張桌子
表1:成員-要存儲有關成員的所有信息,
屬性:MemberUsername(PK),MemberPassword
表2:MsGroup-存儲每個注冊的組
屬性:GroupId(PK),GroupName,GroupDescription
表3:MsGroupDetail-存儲每個組中每個用戶名的列表
屬性: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 + "));");
我已經成功制作了一些代碼來創建成員,創建組,但是問題是我無法創建一個邀請/將新成員添加到組的查詢(無法插入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;
}
每次我邀請一個新成員/將其添加到MsGroupDetail表時,我都無法將其插入MsGroupDetail,日志貓說:“ SQLite約束異常,主鍵必須是唯一的”
* nb:我的MsGroupDetail再次列出了組中的每個成員,
我已經在Sql Server Management Studio 2008中測試了相同的概念,並且可以正常工作,我不知道有什么比上面編碼的概念更好的概念,
你們能告訴我對此有什么解決方案嗎?
非常感謝..
問題是您的GROUP_ID
不是唯一的。 如果您在第1組中有兩個成員,您的表將有兩個條目-
1, Member 1
1, Member 2
通過在GROUP_ID
上指定“ PRIMARY KEY”,您可以說它將是唯一的。 您需要其他主鍵。 在android中,通常使用“ _id”,例如-
db.execSQL("CREATE TABLE IF NOT EXISTS " + MS_GROUP_DETAIL + " ("
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ GROUP_ID + " INTEGER, " + MEMBER_USERNAME
+ " TEXT, FOREIGN KEY (" + MEMBER_USERNAME
+ ") REFERENCES " + MS_MEMBER + "(" + MEMBER_USERNAME
+ "), FOREIGN KEY (" + GROUP_ID + ") REFERENCES "
+ MS_GROUP + "(" + GROUP_ID + "));");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.