SQLite和Flex - 如果不存在则插入?

3
我正在使用Flex开发我的第一个桌面应用程序,并且我也是第一次使用SQLite。我正在创建我的数据库和所有表格,并且我还希望将一些数据行添加到其中一些表格中,以便用户在首次安装时有一些数据可供使用。
唯一的问题是,每次运行程序时,它都会重复插入相同的数据。我想知道是否可以使用“INSERT INTO IF NOT EXISTS”或其他解决方案来避免这个问题。
谢谢!

这里有一个陷阱。你希望在安装时将数据放在那里,但如果用户删除它,它需要保持删除状态。根据你的描述,它每次运行都会插入。我不确定解决方案,但我可以看到这可能是一个问题。 - invertedSpear
2个回答

4

使用相同的主键插入重复数据,并使用“IGNORE”冲突子句:

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

这里的想法是某些限制条件将被违反,该行将被忽略。

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();

首先,Stackoverflow的格式与论坛有些不同,你应该真正编辑你的问题并在其中包含这段代码。至于代码本身,您每次都在创建一个新的主键,您应该明确插入重复的内容,以便违反约束并忽略该行。 - Alex B
请查看更新的答案。别忘了编辑你的问题。 :) - Alex B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接