这是我从数据库中删除一行的方法,其中appointment_date等于传入的日期
public void deleteAllAppointments(String date) {
SQLiteDatabase db = this.getWritableDatabase();
String deleteAllQuery = "DELETE FROM " + TABLE_APPOINTMENTS + " WHERE appointment_date = '" + date + "'";
db.rawQuery(deleteAllQuery, null);
Log.d("Query: ", deleteAllQuery);
}
然后我就像这样使用它
//Database (DatabaseHandler is the one that contains all database methods)
final DatabaseHandler database = new DatabaseHandler(this);
//This happens when button is clicked, it is tested an executes with every chick,
//@param selectedDate is a string like "18/03/2014"
database.deleteAllAppointments(selectedDate);
执行和查询看起来像这样
DELETE FROM appointments WHERE appointment_date = '18/03/2014'
然而,行与约会_日期=' 18/03 / 2014'未删除。
我确定数据库设置正确,因为我有工作方法,所有信息都以正确的格式从那里收到。
注意:添加" *"到" DELETE * FROM ..."返回致命的语法错误。
答案 0 :(得分:3)
rawQuery()
只编译SQL但不运行它。要实际运行它,请使用execSQL()
或调用moveTo...()
返回的游标上的rawQuery()
方法之一。
答案 1 :(得分:1)
对于插入或删除等任务,有非常好的方便方法"比如已经内置到数据库中的[delete method](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#delete(java.lang.String,java.lang.String,java.lang.String []))。
public int delete (String table, String whereClause, String[] whereArgs)
至于为什么你当前的方法会失败,你可能会尝试删除不匹配的列的格式(例如,你已经将表创建为日期值而不是字符串)。
在任何情况下,使用内置的删除方法都比较容易,因为它会在失败时通过返回受删除影响的行数来通知您。 rawQuery只返回一个游标,然后您必须从中获取结果以查看它是否有效。
答案 2 :(得分:1)
您确定自己的数据值是day/month/year
ala的欧洲格式,您的查询值为18/03/2014
,而且可能不是美国风格的month/day/year
:03/18/2014
。
不是试图以美国为中心,但这是我的第一个想法。
否则,请务必查看SQLiteDatabase.delete
:
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#delete(java.lang.String,java.lang.String,java.lang.String [])