結論: Android的數據庫API 工作但文檔是嚴重不完整的。Sqlite:SqliteDatabase.delete()與原始查詢
我最近由於靈活性SQLite的提供了不強迫你創建表時指定數據類型運行到大腦失事情況。問題是我的思維模式假設每個數據類型都是一個通用字符序列(如果沒有指定),因此與數據庫交談的方式是通過java.lang.String
。
但是,你可別怪我要麼當你看到類似下面的方法:
int delete (String table,
String whereClause,
String[] whereArgs)
在
SqlDatabase
類
我有一個表,包括聯繫電話(我存儲爲java.lang.String
)和時間戳作爲一項長期的領域。當我嘗試使用這種方法刪除一條記錄時,儘管進行了無數的調試,但它從未被刪除。
我檢查了一切,查詢是正常的,表是存在的,所有的檢查清單,直到偶然,我發現刪除時間戳,而以原始方式查詢時,而不是使用上述方法產生刪除成功,是這樣的:
DELETE FROM messages_records_table WHERE messageTimestamp = 1508494606000;
,而不是執行以下操作:
DELETE FROM messages_records_table WHERE messageTimestamp = '1508494606000';
,或者
DELETE FROM messages_records_table WHERE messageTimestamp = "1508494606000";
電話號碼不是問題;這是插入/刪除中創建問題的時間戳
所以,我嘗試運行一個原始刪除查詢,刪除了引號(需要使用字符串/ varchar類型),並且它成功刪除。我用這個下面的方法:
db.execSQL(String sql, Object[] whereArgs)
這裏要注意的關鍵一點是,相比於delete()
時Object[]
是String[]
不同。我傳遞了一個Long對象來使它工作,但在delete()
中傳遞Long.toString()
似乎沒用。
所以我的問題是,我的分析是正確的,並delete()
API基本上是無用的或有我錯過了picture..after都有些大,它是由精心Android團隊提供?
您可以包括用於'delete'的實際代碼的 – MikeT