Ошибка SQLError 19 UNIQUE

Я получаю эту ошибку при настройке своего приложения, создании локальной базы данных и просто вставке пользователя first и только (который вошел в систему локально). Пожалуйста, см. Комментарий в коде, где я получаю сообщение об ошибке.

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,
    };
}]);

Где args просто ["user-name-string"], появляется сообщение об ошибке:

"не удалось выполнить оператор из-за сбоя constaint (19 UNIQUE ограничение не выполнено: user.user)

Любые идеи, что могло произойти? Точно такой же код работал и работал в недавнем чистом проекте cordova, который я только портировал на ионный.

Ответ 1

sqlite db сохраняется, когда вы выходите из приложения, поэтому каждый раз, когда вы запускаете приложение, он попытается сделать вставку. (Я уверен, что он работал при первом запуске, и вы получили ошибку во второй раз).

Когда вы используете CREATE TABLE IF NOT EXISTS, приложение не сбой при создании таблицы, а в первой вставке.

Вы можете использовать pragma user_version для чтения/записи версии своей базы данных и поэтому знаете, в каком случае вам нужно создавать таблицы/вставлять значения или если db уже готов к работе.

Ответ 2

Похоже, вы дважды вставляете свой код... здесь

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 query("INSERT INTO user (user) VALUES (?)", args); <-- you did a query above, now you do it again?!?
};