防止用户将相同数据输入数据库(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