2014-03-18 72 views
0

這是我的方法從那裏appointment_date等於在爲什麼這樣的DELETE查詢不起作用?

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 ...」將返回致命的語法錯誤。

+1

發生與添加*的錯誤,因爲這是不恰當的SQL語法。要刪除整個表格,你只需說DELETE FROM TABLE_NAME,*僅用於選擇查詢 – Rarw

回答

3

rawQuery()只編譯SQL,但不運行它。要實際運行它,請使用execSQL()或在由rawQuery()返回的光標上調用moveTo...()方法之一。

如需進一步信息,請參閱What is the correct way to do inserts/updates/deletes in Android SQLiteDatabase using a query string?

+0

請你把我鏈接到moveTo ..()的文檔,試着用google搜索它沒有什麼用處吧 – Ilja

+0

怪異的,文檔說'rawQuery ':「運行提供的SQL並在結果集上返回一個Cursor。」似乎表明查詢被執行(?) –

+0

真的沒有那麼好的文檔。我鏈接到我的一個較老的答案,在那裏我更詳細地解釋事情。 – laalto

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) 

至於爲什麼你目前的做法會失敗,但也可能是因爲你試圖刪除不匹配的列的簡單的格式(例如,你所創建的表作爲一個日期值而不是字符串)。

在任何情況下,使用內置的delete方法都比較容易,因爲它會在失敗時通知您,方法是返回受刪除影響的行數。 rawQuery只是返回一個遊標,然後你必須得到結果來看它是否工作。