2011-11-08 51 views
0

我在我的android應用上獲得了sqlite數據庫以保存保留。 其中一個表中包含每個預留的標題,其中可能包含預留的多個部分,每個預留有RES_ID,而每個部分都有PART_ID 主表只包含RES_ID作爲主鍵,其他表包含在他們每個部分PART_ID和RES_ID都是主鍵將已存在的行添加到sqlite3而不會出現異常

我有一種情況下,我插入幾個部分對象到數據庫中,所以最終會發生什麼是我嘗試插入兩個或更多行具有相同的RES_ID到表。 當然,我得到SQLiteException,限制違規,因爲已經有一個主鍵的行。

是否有一個SQL語句或Java方法\常量,將通知SQLite,失敗是好的,我不 '噸想異常? (只適用於該表)

+0

當我把你的問題正確的時候,你正在尋找插入或替換。 http://www.sqlite.org/lang_replace.html – janoliver

+0

我已經做了一個插入,但因爲我有兩個對象具有相同的RES_ID我得到了違反約束的異常。如果我將使用更新但行不存在仍然我會得到另一個例外,據我所知。 – codeScriber

+0

因此,使用插入或替換,它會替換已存在的行或插入它,如果它不存在... – janoliver

回答

0

當我把你的問題對,你正在尋找insert or replaceClick

replace是一個快捷方式。

+0

這真的是一個答案? –

+0

它被接受爲一個...... –

0

有可能是另一種方法,但確實使用替代而不是INSERT將很好地完成這項工作。 使用sqlite3控制檯客戶端進行檢查時,我能夠將不存在的行插入到所討論的表中。如果該行已經存在,則值將被更新。

10x Jeff and janoliver!

1

不應該這樣工作:

INSERT((SELECT V1爲C1,V2作爲C2,...,VN AS CN),除了表名)INTO表名;

或者相似:

INSERT((SELECT V1爲C1,V2作爲C2,...,VN AS CN)WHERE NOT EXISTS(SELECT * FROM表名WHERE PKC1 = AND的pKV1 = pkc2和pkv2 .. 。AND pkcj = pkvj))INTO tablename;

+0

這可以工作! – codeScriber

1

正如其他人所指出的那樣,可以有多列主鍵。但是應該注意的是,如果你有一些函數不依賴於鍵的引用,你應該考慮規範化你的關係。 http://en.wikipedia.org/wiki/Database_normalization

或者你可以去你的表中的唯一鍵。 http://www.w3schools.com/sql/sql_unique.asp

+1

在許多情況下,如果您需要一個表中的兩個主鍵,這意味着您的數據庫需要規範化,您可以發佈數據庫以便我們可以規範化它。謝謝 – SALMAN

相關問題