2010-02-04 63 views
3

我正在使用flex來開發我的第一個桌面應用程序,我也是第一次使用sqlite。sqlite&flex - 插入如果不存在?

我創建我的數據庫和所有的表,我也想數據的幾行加入到了幾個表格,使用戶有一些數據上先安裝工作。

我有唯一的問題是我每次運行它保持了一遍又一遍插入相同的數據的程序時間。

我只是想知道如果它可能做一個 - INSERT INTO IF NOT EXISTS。或者其他一些工作。

謝謝!

+0

這裏有雖然是陷阱。你想要安裝的數據,但如果用戶刪除它,它需要保持消失。按照您的描述,每次運行時都會插入它。不確定解決方案,但我可以看到它是一個問題。 – invertedSpear 2010-02-04 23:14:28

回答

1

感謝您的見解,但我仍然沒有任何運氣。

這裏是我的代碼

stmt.text = "CREATE TABLE IF NOT EXISTS tbl_breed ("+" breed_id INTEGER PRIMARY KEY AUTOINCREMENT, "+" breed_breed TEXT)"; 
stmt.execute(); 
stmt.text = "INSERT OR IGNORE INTO tbl_breed (breed_breed)"+" VALUES ('Test')"; 
stmt.execute(); 

行,所以我固定的問題 - 我想你必須硬編碼的主鍵下面是我做

stmt.text = "CREATE TABLE IF NOT EXISTS tbl_breed ("+" breed_id INTEGER PRIMARY KEY AUTOINCREMENT, "+" breed_breed TEXT)"; 
stmt.execute(); 
stmt.text = "INSERT OR IGNORE INTO tbl_breed (breed_id,breed_breed)"+" VALUES ('1','test')"; 
stmt.execute(); 
+0

首先,Stackoverflow格式與論壇有一點不同,您應該真正編輯您的問題並在其中包含此代碼。至於代碼本身,你每次都要創建一個新的主鍵,你應該明確地插入重複的內容,這樣違反了約束,並且該行被忽略。 – 2010-02-05 00:17:23

+0

查看更新的答案。別忘了編輯你的問題。 :) – 2010-02-05 00:19:51

4

插入具有相同主鍵,並使用「忽略」衝突條款重複數據:

sqlite> create table t(i integer primary key not null); 
sqlite> insert into t values(1); 
sqlite> insert or ignore into t values(1); 
sqlite> select * from t; 
1 

重複值將不被插入,並且該語句將成功完成。

或者,你可以使用「UNIQUE」約束,而不是主鍵:

sqlite> create table t(i integer unique not null); 
sqlite> insert into t values(1); 
sqlite> insert or ignore into t values(1); 
sqlite> select * from t; 
1 

的想法是,某些約束將得到侵犯,該行會被忽略。

+0

感謝您的洞察力,但我仍然沒有任何運氣...... – Adam 2010-02-04 23:35:09