[英]How to check if an item is in a database before trying to add it
我有一個 android 應用程序正在添加和更新數據庫。 學號是主鍵。 當用戶嘗試添加副本時,我試圖讓應用程序顯示一條消息。 這是我最近的嘗試; 它觸發了 catch 子句。
在我的主要活動中,我有這個條件語句:
if (!dbHandler.checkStudentID(studentID)){
Toast.makeText(MainActivity.this, "Student ID is a Duplicate",
Toast.LENGTH_SHORT).show();
}
dbHandler.addNewStudent(studentID, firstName, lastName, grade);
在我的處理程序中,方法是這樣的:
public boolean checkStudentID (String studentID) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor checkID = db.rawQuery("SELECT student_id FROM " + TABLE_NAME +
" where student_id=?", new String[]{studentID});
String x = checkID.getString(0);
checkID.close();
return x.isEmpty();
}
Logcat 沒有顯示任何問題,也沒有顯示任何語法問題,所以我不知道哪里不正確。
當使用 Cursor 時, rawQuery將返回位於第一行之前的Cursor(任何返回 Cursor 的 SQLiteDatabase 方法也是如此)。 要提取數據,您需要相應地輸入 position 和 Cursor。
在您的情況下,您只需要知道是否提取了任何數據,因此您可以使用moveToFirst方法。 如果可以移動(如果有任何數據)或 false(如果沒有數據),這將返回 true。
所以你可以使用類似的東西: -
public static boolean checkStudentID (String studentID) {
boolean rv = false;
SQLiteDatabase db = this.getReadableDatabase();
Cursor checkID = db.rawQuery("SELECT student_id FROM " + TABLE_NAME +
" where student_id=?", new String[]{studentID});
if (checkID.moveToFirst()) {
rv = true;
}
checkID.close();
return rv;
}
這是我最近的嘗試; 它觸發了 catch 子句。
因為當您執行String x = checkID.getString(0);
,因此異常被捕獲/捕獲。
問題是如果studentID
, String x = checkID.getString(0)
包含null
。 這樣,調用x.isEmpty()
將拋出 NullPointerException。 所以你應該通過以下方式攔截它:
public static boolean checkStudentID (String studentID) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor checkID = db.rawQuery("SELECT student_id FROM " + TABLE_NAME +
" where student_id=?", new String[]{studentID});
String x = checkID.getString(0);
checkID.close();
if (x == null || x.isEmpty()) {
return false;
}
else {
return true;
}
}
我認為您甚至可以完全不x.isEmpty()
。
如果Toast.makeText().show()
沒有終止程序,您最好將addNewStudent
部分包裝在else
-case 中。 否則照樣執行!
if (!dbHandler.checkStudentID(studentID)){
Toast.makeText(MainActivity.this, "Student ID is a Duplicate",
Toast.LENGTH_SHORT).show();
}
else{
dbHandler.addNewStudent(studentID, firstName, lastName, grade);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.