我創建了一個用於更新SQLite數據庫的C++應用程序。應用程序讀取一行,用該行中的值執行一個操作,然後用當前時間更新「修改」列。我相信我只使用SELECT,INSERT,CREATE命令。SQLite,找到一個包含主鍵列的重複字段的表格
應用程序在問題開始發生前的前幾天正確運行。當我用sqlite-administrator檢查數據庫設置時,我發現有一個表有一個重複鍵值的行。
我創建的表使用此命令
CREATE TABLE 'XXXX_tasks' ('id' INTEGER PRIMARY KEY , 'data_length' INTEGER, 'data_offset' INTEGER, 'data_table' TEXT, 'device_id' INTEGER, 'modified' INTEGER, 'name' TEXT, 'object_id' INTEGER, 'object_type' TEXT, 'object_units' INTEGER, 'property' INTEGER, 'scan' INTEGER, 'type' TEXT)
該表中的數據看起來像這樣(減少可讀性)
ID | Name | Object ID
5 | AV_33 | 33 <===
2 | AV_34 | 34
3 | AV_35 | 35
4 | AV_36 | 36
5 | AV_33 | 33 <===
看來,有一個重複鍵的兩行領域。起初我以爲這是一個損壞的數據庫文件,一個僥倖。我刪除了數據庫文件並重新啓動了應用程序。一週後發生同樣的問題。它的可重複性。
您也可以下載/查看數據庫在這裏提交自己http://www.abluestar.com/files/uploads/database_jan312012.db
我的問題是:
我不能想到的,你可以創建一個創建或更新行有任何理由重複的主鍵值。任何想法如何發生?
只是想法,沒有把握:1.觸發器。 2.線程安全 - 你有嗎? 3.直接打開文件而不是使用SQLite庫。 4.問題在於'sqlite-administrator',而不是SQLite。我懷疑你已經發現SQLite本身的錯誤,它超越了堅如磐石的... – Borealid 2012-02-01 00:57:20
有趣的是,第一行不能刪除的更新,它只是在那裏... – user1096188 2012-02-01 01:19:18
@Borealid我已經找到了相同的表,當我用SQLite庫而不是應用程序打開SQLite數據庫。我傾向於同意SQLite超越堅如磐石,但有沒有創建類似這樣的表的「有效」方式? – 2012-02-01 17:26:50