2010-07-30 148 views
4

足夠簡單的問題,但我不能找到螞蟻一半體面的文檔。對,所以我創建了我的SQLite數據庫,但它有兩個問題或一個取決於你如何看待它!數據庫創建罰款,我可以顯示在基本的列表視圖中的數據,但改變電話/模擬器的方向插入語句再次運行並複製所有記錄。我猜這與OnCreate()方法中的所有代碼有關。 但我的主要問題是如何做INSERT UNIQUE或查詢數據庫以查看記錄是否存在?我只能在Android平臺上找到有關SQLite數據庫參數的好文檔。Android SQLite插入唯一

任何幫助都非常有義務!

乾杯

回答

2

你應該充分利用已在Android SDK中的DatabaseUtils .stringForQuery()靜態方法來方便地檢索一個值,這個例子是String機器人也有對Long

stringForQuery(SQLiteDatabase db, String query, String[] selectionArgs) 
方法

實用程序方法在db上運行查詢並返回第一行第一列中的值。

喜歡的東西

String myString=DatabaseUtils.stringForQuery(getDB(),query,selectionArgs); 

這個例子是爲了得到一個字符串值,但你可以很容易地適應得到Long值,和您的查詢應該是這樣

select count(*) from mytable where field1='stringtocheckagainst' 

如果返回一個大於零的數字,那麼該字段已經存在於數據庫中。

另請參閱處理方向更改的代碼。


UPDATE通過@nutone:

在API 11及更高版本,您還可以使用DatabaseUtils.queryNumEntries功能直接獲得的(過濾)的行數。

long count = DatabaseUtils.queryNumEntries(getDB(), table, query, selectionArgs); 
6

的SQLite有INSERT OR REPLACE命令(REPLACE短,或使用SQLiteDatabase.replace()),可以做你想做的。

但是我建議你的應用程序不應該在每次創建Activity時重新插入到數據庫中,除非它真的需要,所以你可能想要考慮改變設計。

2

有一件事是你需要處理你的方向改變問題,訪問數據庫上的每個方向改變消耗很多。

第二件事,關於檢查重複記錄的問題,您可以定義列作爲唯一喜歡

CREATE TABLE table_name(column_definition, unique(column_names) ON CONFLICT replace);` hen 

您可以執行插入像往常一樣,該數據庫將確保沒有重複存在。

+1

這是最好的答案。唯一性應該在模式級別處理,而不是在運行時使用無關的查詢。這隻會增加更多的開銷。 – hungryghost 2014-06-25 04:49:27