SQLError 19 UNIQUE约束失败

nov*_*ain 10 javascript sql network-programming angularjs cordova

我在设置我的应用程序,创建本地数据库并只插入第一个也是唯一一个用户(已在本地登录)时收到此错误.请在代码中查看我收到错误消息的注释.

angular.module("greenApp")
.service("dbService",['$q', function($q){

    var db;
    var promise = function(){
        var deferred = $q.defer();

        db = window.openDatabase('greenDB', '1.0', 'Green Database', 2*1024*1024);

        db.transaction(function(tx){
            tx.executeSql("CREATE TABLE IF NOT EXISTS user (user TEXT PRIMARY KEY) ")
        }, function(err){
            alert('Something went wrong... Error: DATABASE INIT ' + err);
        }, function(scc){
            deferred.resolve();
        })

        return deferred.promise;
    }
    promise();

    var query = function(sql, args) {
        var deferred = $q.defer();

        db.transaction(function(tx) {
            tx.executeSql(sql, args, function(tx, results) {
                deferred.resolve(results);
            });
        }, function(err) {
            deferred.reject(err);
        });

        return deferred.promise;
    };

    var insert_into = function(args) {
        var queryPromise = query("INSERT INTO user (user) VALUES (?)", args);
        console.log("in insert_into", queryPromise) // Error message comes here
        return queryPromise;
    };

    return {
        promise: promise,
        insert_into: insert_into,
    };
}]);
Run Code Online (Sandbox Code Playgroud)

其中args仅仅是["user-name-string"],我得到一个错误,指出消息:

"由于constaint故障导致无法执行语句(19 UNIQUE约束失败:user.user)

有什么想法会发生什么?完全相同的代码正在运行并在最近的纯cordova项目中工作,我刚刚移植到Ionic.

Qui*_*Fix 1

当您退出应用程序时,sqlite 数据库仍然存在,因此每次您启动应用程序时,它都会尝试执行插入操作。(我猜它在第一次启动时有效,但第二次时出现错误)。

当您使用CREATE TABLE IF NOT EXISTS该应用程序时,表创建不会失败,但第一次插入会失败。

您可以使用 pragma user_version 来读取/写入数据库的版本,以便了解在哪种情况下您必须创建表/插入值或者数据库是否已准备就绪。