2017-05-17 22 views
0

私はアンドロイドアプリでデータベースを作成しました。それは、ユーザーが自分のアプリに登録している間に入力した登録番号と呼ばれる主キーを持っています。すべてが正常に動作しますが、2人のユーザーが同じ登録番号を入力すると、アカウントが作成されないと例外のようなスローされます。AndroidのSQLiteデータベースの主キークエリ

android.database.sqlite.SQLiteConstraintException: column registration_number 
is not unique (code 19) 

これで結構です。私はアプリがこのように振る舞うようにしたい。しかし、どのように私はこの登録番号が利用できないことをユーザーに知らせるのですか? マイコード:

public class DatabaseOperations extends SQLiteOpenHelper { 

public static final int database_version=1; 
public static final String DATABASE_NAME = "Aliah.db"; 
public static final String TABLE_NAME = "student_info"; 
public static final String REGISTRATION_NUMBER = "registration_number"; 
public static final String USER_NAME = "user_name"; 
public static final String USER_PASS = "user_pass"; 
public static final String EMAIL = "email"; 


public DatabaseOperations(Context context) { 
    super(context, DATABASE_NAME, null, database_version); 
    Log.d("Databse operations", "Database created"); 
} 

@Override 
public void onCreate(SQLiteDatabase sdb) { 

    try{ 
    sdb.execSQL("create table "+ TABLE_NAME +" (registration_number VARCHAR PRIMARY KEY, user_name VARCHAR, user_pass VARCHAR, email VARCHAR);"); 
    Log.d("Databse operations", "one row inserted");}catch(SQLException e){}; 
    } 
} 


@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
    onCreate(db); 

} 

public void putInformation(DatabaseOperations dop,String registration_number,String name,String pass,String email){ 

    SQLiteDatabase SQ = dop.getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(REGISTRATION_NUMBER,registration_number); 
    cv.put(USER_NAME, name); 
    cv.put(USER_PASS,pass); 
    cv.put(EMAIL,email); 
    long k = SQ.insert(TABLE_NAME,null,cv); 
    Log.d("Databse operations", "One row inserted"); 

} 

public Cursor getInformation(DatabaseOperations dop){ 

    SQLiteDatabase SQ = dop.getReadableDatabase(); 
    String[] columns = {REGISTRATION_NUMBER, USER_NAME, USER_PASS, EMAIL}; 
    Cursor CR = SQ.query(TABLE_NAME,columns,null,null,null,null,null); 
    return CR; 

} 

} 

答えて

-1

あなたはPRIMARY KEYとしてカラム名registration_numberを使用しており、registration_numberの値はuniqueでなければなりません。

INTEGERであり、このidPRIMARY KEYとして使用することをお勧めします。 registration numberを複製チェックする方法下記

使用:以下のように

public boolean isExistRegistrationNumber(String regNumber) { 

    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor c = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); 

    if(c.moveToFirst()) 
    { 
     do 
     { 
      String registrationNumber = c.getString(c.getColumnIndex(REGISTRATION_NUMBER))); 

      if(registrationNumber.equals(regNumber)) 
       return true; 

     }while(c.moveToNext()); 
    } 

    return false; 
} 

更新DatabaseOperationsクラス:

public class DatabaseOperations extends SQLiteOpenHelper { 

public static final int database_version=1; 
public static final String DATABASE_NAME = "Aliah.db"; 
public static final String TABLE_NAME = "student_info"; 
public static final String ID = "id"; 
public static final String REGISTRATION_NUMBER = "registration_number"; 
public static final String USER_NAME = "user_name"; 
public static final String USER_PASS = "user_pass"; 
public static final String EMAIL = "email"; 


public DatabaseOperations(Context context) { 
    super(context, DATABASE_NAME, null, database_version); 
    Log.d("Databse operations", "Database created"); 
} 

@Override 
public void onCreate(SQLiteDatabase sdb) { 

    try { 
     sdb.execSQL("create table "+ TABLE_NAME +" (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, registration_number VARCHAR, user_name VARCHAR, user_pass VARCHAR, email VARCHAR);"); 
     Log.d("Databse operations", "one row inserted");}catch(SQLException e){}; 
    } 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
    onCreate(db); 

} 

public void putInformation(DatabaseOperations dop,String registration_number,String name,String pass,String email){ 

    SQLiteDatabase SQ = dop.getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(REGISTRATION_NUMBER,registration_number); 
    cv.put(USER_NAME, name); 
    cv.put(USER_PASS,pass); 
    cv.put(EMAIL,email); 
    long k = SQ.insert(TABLE_NAME, null, cv); 
    Log.d("Databse operations", "One row inserted"); 

} 

public Cursor getInformation(DatabaseOperations dop){ 

    SQLiteDatabase SQ = dop.getReadableDatabase(); 
    String[] columns = {REGISTRATION_NUMBER, USER_NAME, USER_PASS, EMAIL}; 
    Cursor CR = SQ.query(TABLE_NAME,columns,null,null,null,null,null); 
    return CR; 

} 

public boolean isExistRegistrationNumber(String regNumber) { 

    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor c = db.rawQuery("SELECT * FROM " + TABLE_NAME, null); 

    if(c.moveToFirst()) 
    { 
     do 
     { 
      String registrationNumber = c.getString(c.getColumnIndex(REGISTRATION_NUMBER))); 

      if(registrationNumber.equals(regNumber)) 
       return true; 

     }while(c.moveToNext()); 
    } 

    return false; 
} 

} 

最後に、uninstallreinstallアプリケーションとあなたに再びinsertingデータを試してみてくださいデータベース。

希望これは〜

+0

私はdownvotingの理由を知っていますか? – FAT

関連する問題