【问题标题】:sqlite & flex - insert into if not exists?sqlite & flex - 如果不存在则插入?
【发布时间】:2011-01-13 07:38:08
【问题描述】:

我正在使用 flex 开发我的第一个桌面应用程序,并且我也是第一次使用 sqlite。

我正在创建我的数据库和所有表,并且我还想将几行数据添加到几个表中,以便用户在首次安装时可以使用一些数据。

我遇到的唯一问题是每次我运行程序时它都会一遍又一遍地插入相同的数据。

我只是想知道是否可以执行 - 如果不存在则插入。或其他一些解决方法。

谢谢!

【问题讨论】:

  • 这里有一个陷阱。您想要安装时的数据,但如果用户删除它,它需要保持消失。根据您的描述,它每次运行时都会插入。不确定解决方案,但我可以看到这是一个问题。

标签: database apache-flex sqlite insert


【解决方案1】:

插入具有相同主键的重复数据并使用“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

这个想法是违反某些约束并且将忽略该行。

【讨论】:

    【解决方案2】:

    感谢您的见解,但我仍然没有运气。

    这是我的代码

    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 格式与论坛有点不同,您应该真正编辑您的问题并将此代码包含在其中。至于代码本身,您每次都在创建一个新的主键,您应该显式插入重复项,这样就会违反约束并忽略该行。
    • 查看更新的答案。不要忘记编辑您的问题。 :)
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2012-03-14
    • 2013-10-20
    • 2018-09-17
    • 2014-11-29
    相关资源
    最近更新 更多