INSERT或IGNORE似乎更新了非唯一字段

时间:2016-04-12 11:34:18

标签: javascript sqlite cordova cordova-plugins

我正在使用SQLite作为应用。 在设备就绪时,我想添加一个数据库并使用Sqlite cordova插件创建+填充一些包含一些数据的表。 当数据库已经存在时,它不必添加和填充它。

所以我带了这段代码:

onDeviceReady: function() {

    //create the SQLite database
    APP.db = window.sqlitePlugin.openDatabase({name: 'my.db', iosDatabaseLocation: 'default', androidLockWorkaround: 1}, HKV.successDB, HKV.errorDB);

    if (APP.showDemo === true) {
        APP.db.transaction(APP.queryDB, APP.errorDB);
    }

},

 successDB: function () {

    //fill database
    APP.db.sqlBatch([
        'CREATE TABLE IF NOT EXISTS demo (id unique, version)',
        'INSERT OR IGNORE INTO demo (id, version) VALUES (1, null)',
        'CREATE TABLE IF NOT EXISTS instaDemo (id unique, show)',
        'INSERT OR IGNORE INTO instaDemo (id, show) VALUES (1, "true")'
    ], function (success) {
        //
    }, function (error) {
        alert('DB2 Error: ' + error.message);
    });

},

第一次启动应用程序时,这确实有效。 第一次运行后,将更改版本列中的“null”。 我测试了这个,价值确实发生了变化。所以这不是!这个问题。

下次启动应用程序时,我希望'demo'表有一个id(从第一次运行)并忽略INSERT语句。

然而,似乎它确实将版本值设置为null,而将id保留为原样。这是我不期望的行为。这样就像INSERT OR UPDATE语句一样。

这是正常行为吗? 如果是这样的话:我该怎么做才能防止这种情况发生?

我也试过不同的变种:

INSERT OR ABORT 

0 个答案:

没有答案