Sqlite 向SQL lite删除函数添加AND语句-崩溃应用程序
出于明显的原因,我正试图删除输入名字和姓氏的记录。我的尝试如下(单击“我的删除侦听器”): 我收到的错误在第72行,这是光标Sqlite 向SQL lite删除函数添加AND语句-崩溃应用程序,sqlite,android-studio,Sqlite,Android Studio,出于明显的原因,我正试图删除输入名字和姓氏的记录。我的尝试如下(单击“我的删除侦听器”): 我收到的错误在第72行,这是光标 p> >你应该认真考虑在这里使用一个准备好的语句,因为它将处理正确地避开你的代码>删除< /COD>语句中的所有文字的问题。由于我不知道您使用的是哪个框架,所以我不会给出其中一个框架的代码。要立即解决问题,请删除姓氏后出现的额外单引号: String sql = "SELECT * FROM customer WHERE fname = '" + wfname.getT
<> p> >你应该认真考虑在这里使用一个准备好的语句,因为它将处理正确地避开你的代码>删除< /COD>语句中的所有文字的问题。由于我不知道您使用的是哪个框架,所以我不会给出其中一个框架的代码。要立即解决问题,请删除姓氏后出现的额外单引号:
String sql = "SELECT * FROM customer WHERE fname = '" + wfname.getText();
sql += "' AND lname = '" + lname.getText() + "'";
Cursor c = db.rawQuery(sql, null);
<>你应该认真考虑在这里使用一个准备好的语句,因为它将处理正确地避开你的代码>删除> /COD>语句中的所有文字的问题。由于我不知道您使用的是哪个框架,所以我不会给出其中一个框架的代码。要立即解决问题,请删除姓氏后出现的额外单引号:
String sql = "SELECT * FROM customer WHERE fname = '" + wfname.getText();
sql += "' AND lname = '" + lname.getText() + "'";
Cursor c = db.rawQuery(sql, null);
关于评论:- 对准备好的陈述不太确定,但不介意学习 如果您想为其中一个提供代码,请在此上下文中使用大约一个 下面是对代码的直接改编,它将使用
rawQuery
和execSQL
方法转换为准备语句的query
和delete
方便方法
代码还修复了一个可能会让您困惑甚至是实际问题的问题,即您需要使用toString
方法(如您之前所做的)来获取编辑文本中的数据
String whereclause = "fname =? AND lname + =?"; //<<<< Where statement with ?'s for arguments
String[] whereargs = new String[]{
fname.getText().toString(), // First arg for first ?
lname.getText().toString() // Second arg for second ?
};
Cursor c = db.query(
"customer", //<<<< table name
null, //<<<< equates to * (all columns)
whereclause, //<<<< the WHERE clause (less WHERE keyword)
whereargs, //<<<< the argumnets to replace the ?'s (will be escaped/enclosed in quotes for you)
null,
null,
null
);
//<<<<< REPLACED Cursor c = db.rawQuery("SELECT * FROM customer WHERE fname='" + fname.getText() + "' AND lname='" + lname.getText() + "''", null);
if (c.moveToFirst()) {
db.delete(
"customer",
whereclause,
whereargs
);
//<<<<< REPLACED db.execSQL("DELETE FROM customer WHERE fname='" + fname.getText() + "' AND lname='" + lname.getText() + "''");
showMessage("Success", "Record Deleted");
} else {
showMessage("Error", "Invalid First and Last Name");
}
您可能希望考虑以下信息以获取更多信息:-
-
- 注意,有4种查询方法(另外还有其他方便的方法,如
和insert
)update
- 注意,有4种查询方法(另外还有其他方便的方法,如
rawQuery
和execSQL
方法转换为准备语句的query
和delete
方便方法
代码还修复了一个可能会让您困惑甚至是实际问题的问题,即您需要使用toString
方法(如您之前所做的)来获取编辑文本中的数据
String whereclause = "fname =? AND lname + =?"; //<<<< Where statement with ?'s for arguments
String[] whereargs = new String[]{
fname.getText().toString(), // First arg for first ?
lname.getText().toString() // Second arg for second ?
};
Cursor c = db.query(
"customer", //<<<< table name
null, //<<<< equates to * (all columns)
whereclause, //<<<< the WHERE clause (less WHERE keyword)
whereargs, //<<<< the argumnets to replace the ?'s (will be escaped/enclosed in quotes for you)
null,
null,
null
);
//<<<<< REPLACED Cursor c = db.rawQuery("SELECT * FROM customer WHERE fname='" + fname.getText() + "' AND lname='" + lname.getText() + "''", null);
if (c.moveToFirst()) {
db.delete(
"customer",
whereclause,
whereargs
);
//<<<<< REPLACED db.execSQL("DELETE FROM customer WHERE fname='" + fname.getText() + "' AND lname='" + lname.getText() + "''");
showMessage("Success", "Record Deleted");
} else {
showMessage("Error", "Invalid First and Last Name");
}
您可能希望考虑以下信息以获取更多信息:-
-
- 注意,有4种查询方法(另外还有其他方便的方法,如
和insert
)update
- 注意,有4种查询方法(另外还有其他方便的方法,如