для предотвращения ввода пользователем тех же данных в базу данных, я использую это
db.execSQL("CREATE UNIQUE INDEX DIFFERENT ON user(name, gender)");
Мой вопрос: как я могу показать ошибку конечным пользователям, которые сообщают им, что данные, которые они вводят, уже существуют?Или есть другой способ запретить пользователю вводить те же данные и показывать ошибку пользователю?
DatabaseUsername.java (где я помещаю уникальный индекс)
public class DatabaseUsername extends SQLiteOpenHelper {
private static final String DATABASE_NAME="rikartoiy.db";
private static final int SCHEMA_VERSION=1;
public DatabaseUsername(Context context) {
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE user (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, gender TEXT);");
db.execSQL("CREATE TABLE score (_id INTEGER PRIMARY KEY AUTOINCREMENT, score INTEGER, dateTaken TEXT, userId INTEGER NOT NULL, FOREIGN KEY (userId) REFERENCES user(_id) ON DELETE CASCADE);"); //create table score
db.execSQL("CREATE UNIQUE INDEX DIFFERENT ON user(name, gender)")
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// no-op, since will not be called until 2nd schema
// version exists
}
public Cursor getAll() {
return(getReadableDatabase()
.rawQuery("SELECT _id, name, gender FROM user ORDER BY name",
null));
}
public Cursor getCurScore() {
return(getReadableDatabase()
.rawQuery("SELECT alm._id, alm.name, alm.gender, sc._id, sc.score, sc.userId FROM user alm, score sc WHERE sc.userId = alm._id AND alm._id = ?",
null));
}
public Cursor getById(String id) {
String[] args={id};
return(getReadableDatabase()
.rawQuery("SELECT _id FROM user WHERE _ID=?",
args));
}
public void insert(String name, String gender) {
ContentValues cv=new ContentValues();
cv.put("name", name);
cv.put("gender", gender);
getWritableDatabase().insert("user", name, cv);
}
public void insertMark(int score, int userId, String dateTaken) {
ContentValues cv=new ContentValues();
cv.put("score", score);
cv.put("userId", userId);
cv.put("dateTaken", dateTaken);
getWritableDatabase().insert("score", null, cv);
}
public String getName(Cursor c) {
return(c.getString(1));
}
public String getGender(Cursor c) {
return(c.getString(2));
}
public int getScore(Cursor c) {
return(c.getInt(3));
}}
UsernameRegister.java (где пользователь вводит данные)
public class UsernameRegister extends Activity {
EditText name=null;
RadioGroup gender=null;
DatabaseUsername helper=null;
String almagId=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.usernameregister);
helper=new DatabaseUsername(this);
name=(EditText)findViewById(R.id.name);
gender=(RadioGroup)findViewById(R.id.gender);
Button save=(Button)findViewById(R.id.save);
save.setOnClickListener(onSave);
almagId=getIntent().getStringExtra(UsernameList.ID_EXTRA);
if (almagId!=null) {
load();
}
}
@Override
public void onDestroy() {
super.onDestroy();
helper.close();
}
private void load() {
Cursor c=helper.getById(almagId);
c.moveToFirst();
name.setText(helper.getName(c));
if (helper.getGender(c).equals("Pria")) {
gender.check(R.id.pria);
}
else if (helper.getGender(c).equals("Perempuan")) {
gender.check(R.id.perempuan);
}
c.close();
}
private View.OnClickListener onSave=new View.OnClickListener() {
public void onClick(View v) {
String type=null;
switch (gender.getCheckedRadioButtonId()) {
case R.id.pria:
type="Pria";
break;
case R.id.perempuan:
type="Perempuan";
break;
}
String namanama = name.getText().toString();
if (almagId==null) {
helper.insert(namanama, type);
if(TextUtils.isEmpty(namanama))
{
name.setError("Your name can't be empty");
return;
}
else if (namanama.length() < 3 )
{
name.setError("Your name can't less than 3");
return;
}
else if (namanama.length() > 10 )
{
name.setError("Your name can't more than 3");
return;
}
}
finish();
}
};}