gpt4 book ai didi

java - 添加到 SQLite 数据库时不允许重复

转载 作者:行者123 更新时间:2023-11-29 18:52:42 25 4
gpt4 key购买 nike

我目前有一个学生成绩/类(class)输入程序,它接受以下输入:学生 ID、名字、姓氏、类(class) ID、类(class)名称、绩点和字母等级。

出于显而易见的原因,我想限制用户输入相同学生/类(class)(学生 ID、类(class) ID)对的重复记录,以及相同学生 ID 和名字/姓氏的重复记录。 (两个学生不能填同一个ID。

目前我有一个非常基本的方法来添加这些数据,实现我的 Intent 的最佳方法是什么?:

 db=openOrCreateDatabase("STUDENTGRADES", Context.MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS CUSTOMER_TABLE(studentid VARCHAR, fname VARCHAR, lname VARCHAR, classid VARCHAR, classname VARCHAR, pointgrade INTEGER, lettergrade VARCHAR);");


add.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(fname.getText().toString().trim().length()==0||
lname.getText().toString().trim().length()==0 || studentid.getText().toString().trim().length()==0)
{
showMessage("Error", "Please enter First & Last Name and Student ID");
return;
}
db.execSQL("INSERT INTO CUSTOMER_TABLE VALUES('"+studentid.getText()+"','"+fname.getText()+"','"+lname.getText()+"','"+classid.getText()+"','"+classname.getText()+
"','"+pointgrade.getText()+"','"+lettergrade.getText()+"');");
showMessage("Success", "Student Record added successfully");
clearText();
}
});

最佳答案

您可以使用方法insertWithOnConflict使用 CONFLICT_IGNORE 标志,如果您不想替换此行。如果没有相同的raw,方法返回-1,所以你可以处理它

已编辑:

首先,您需要创建唯一行(在您的例子中是类(class) ID 和学生 ID):

db.execSQL("CREATE TABLE YOURDB (" 
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "STUDENTID TEXT UNIQUE, "
+ "CLASSID TEXT UNIQUE);");

然后创建变量来检查方法的结果

int k = 0;

尝试向我们的 k

插入值并获取结果
try {
SQLiteDatabase db = dbHelper.getWritableDatabase();
k = db.insertWithOnConflict("YOURDB",null, contentValues, SQLiteDatabase.CONFLICT_IGNORE);

db.close();
}

最后检查你的变量(我是在AsyncTask中创建的,所以检查方法位于onPostExecute()方法中)

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (k==-1){
Toast.makeText(getApplicationContext(), "Same raws", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), "not same raws", Toast.LENGTH_SHORT).show();
}
}

如果值重合,DataBase 不会更新,你的k 得到-1 值,所以,你可以制作Toast 或其他东西来处理它

编辑 2:

关于 ContentValue 初始化:

首先,您应该获取值,例如,您从 editText 中获取它们:

String studentIdUpdate = studentEditText.getText().toString();
String classIdUpdate = classEditText.getText().toString();

然后创建 ContentValues 变量并将值放入其中

ContentValues contentValues = new ContentValues();
contentValues.put("STUDENTID", studentIdUpdate);
contentValues.put("CLASSID", classIdUpdate);

关于java - 添加到 SQLite 数据库时不允许重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50607019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com