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.
当您退出应用程序时,sqlite 数据库仍然存在,因此每次您启动应用程序时,它都会尝试执行插入操作。(我猜它在第一次启动时有效,但第二次时出现错误)。
当您使用CREATE TABLE IF NOT EXISTS该应用程序时,表创建不会失败,但第一次插入会失败。
您可以使用 pragma user_version 来读取/写入数据库的版本,以便了解在哪种情况下您必须创建表/插入值或者数据库是否已准备就绪。
| 归档时间: |
|
| 查看次数: |
1794 次 |
| 最近记录: |