2017-10-04 7 views
1

学生がいるテーブルがあります。 表には、これらの列のビルドです:sqliteテーブルを特定の行で更新し、既存の行を繰り返さない方法は?

"CREATE TABLE IF NOT EXISTS " + STUDENTS_TABLE 
           + "(" + STUDENT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " 
           + STUDENT_NAME + " TEXT NOT NULL, " 
           + GROUP + " TEXT NOT NULL);"; 

ユーザーが新しい学生を追加したい場合には、私はテーブルを更新する必要があります。 したがって、ユーザーが新しい生徒を追加する場合は、生徒をコードマップに追加してから、マップに保存されているすべての生徒をデータベースに更新します。

この場合、私は異なるIDを持つが、同じ名前とグループを持つ生徒が重複しています。

私はテーブルを削除して、各学生を追加したくないです。

私は他の方法を探しています。

誰かが私を助けることができますか?

データベースではない学生のみを更新したいと考えています。

+0

'name'と 'group'の制約を持つテーブルに対してUNIQUE制約を追加することは要件に適していませんか? – Barns

+0

もし私がそれを知っていれば..そうかもしれない:-) – Yanshof

答えて

1

あなたがCREATE TABLEステートメントにユニーク制約を追加することができます

"CREATE TABLE IF NOT EXISTS " + STUDENTS_TABLE 
           + "(" + STUDENT_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " 
           + STUDENT_NAME + " TEXT NOT NULL, " 
           + GROUP + " TEXT NOT NULL, " 
           + CONSTRAINT name_unique UNIQUE (STUDENT_NAME, GROUP));"; 

今、あなたは同じSTUDENT_NAMEとGROUPとのエントリを挿入することができません。もちろん、エラーを処理する必要があるかもしれません。

また、あなたがこのような何かを行うことができます:

INSERT INTO STUDENTS_TABLE(Field1,Field2, ...) 
SELECT value1, value2, ... 
WHERE NOT EXISTS(SELECT STUDENT_NAME FROM STUDENTS_TABLE WHERE STUDENT_NAME = valueName AND GROUP = valueGroup); 

「...」あなたはより多くのフィールドに複数の値を追加する必要がある場合にはあります。

関連する問題