Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止用户将相同数据输入数据库(android)_Android_Sqlite_Indexing_Unique - Fatal编程技术网

防止用户将相同数据输入数据库(android)

防止用户将相同数据输入数据库(android),android,sqlite,indexing,unique,Android,Sqlite,Indexing,Unique,为了防止用户将相同的数据输入数据库,我使用 db.execSQL("CREATE UNIQUE INDEX DIFFERENT ON user(name, gender)"); 我的问题是,如果最终用户告诉他们输入的数据已经存在,我如何向他们显示错误?或者有其他方法防止用户输入相同的数据并向用户显示错误 DatabaseUsername.java(我在其中放置唯一索引) java(用户在其中输入数据) 公共类用户名注册扩展活动{ EditText name=null; 放射组性别=空; Dat

为了防止用户将相同的数据输入数据库,我使用

db.execSQL("CREATE UNIQUE INDEX DIFFERENT ON user(name, gender)");
我的问题是,如果最终用户告诉他们输入的数据已经存在,我如何向他们显示错误?或者有其他方法防止用户输入相同的数据并向用户显示错误

DatabaseUsername.java(我在其中放置唯一索引)

java(用户在其中输入数据)

公共类用户名注册扩展活动{
EditText name=null;
放射组性别=空;
DatabaseUsername-helper=null;
字符串almagId=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.usernameregister);
helper=新数据库用户名(此);
name=(EditText)findViewById(R.id.name);
性别=(放射组)findViewById(R.id.gender);
按钮保存=(按钮)findViewById(R.id.save);
save.setOnClickListener(onSave);
almagId=getIntent().getStringExtra(UsernameList.ID_EXTRA);
如果(almagId!=null){
加载();
}
}
@凌驾
公共空间{
super.ondestory();
helper.close();
}
专用空心荷载(){
游标c=helper.getById(almagId);
c、 moveToFirst();
name.setText(helper.getName(c));
if(helper.getGender(c.equals)(“Pria”)){
性别。检查(R.id.pria);
}
else if(helper.getGender(c.equals)(“Perempuan”)){
性别。检查(R.id.perempuan);
}
c、 close();
}
private View.OnClickListener onSave=new View.OnClickListener(){
公共void onClick(视图v){
字符串类型=null;
开关(gender.getCheckedRadioButtonId()){
案例R.id.pria:
type=“Pria”;
打破
案例R.id.perempuan:
type=“Perempuan”;
打破
}
字符串namanama=name.getText().toString();
if(almagId==null){
插入(namanama,类型);
if(TextUtils.isEmpty(namanama))
{ 
name.setError(“您的名称不能为空”);
返回;
}
else if(namanama.length()<3)
{ 
name.setError(“您的姓名不能少于3”);
返回;
}
else if(namanama.length()>10)
{ 
name.setError(“您的名字不能超过3”);
返回;
}
}
完成();
}
};}

您可以使用
mDb.insert()的返回值

如果它返回-1,并且您确定错误不能来自重复值以外的其他原因,请告诉用户值已经存在


或者,您可以创建一个函数来查找用户在数据库中输入的值,如果这些值存在,则在插入它们之前向用户显示一条消息。

我猜,您可以通过在插入之前检查数据库中的数据来实现相同的功能。

在何处将数据插入数据库?给代码,如果你插入已经存在的值,它肯定会抛出一个异常,只要让用户知道数据已经存在,如果异常发生,这是我想做的,但是如果我使用unique index,我不知道如何做如果我创建一个函数来检查,那么就不需要再使用unique index了?
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));
}}
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();
    }
};}
Returns

    the row ID of the newly inserted row, or -1 if an error occurred