Javascript SQLError 19唯一约束失败
我在设置我的应用程序、创建本地数据库并简单地插入第一个和仅用户(已在本地登录)时遇到此错误。请参阅代码中的注释以获取错误消息Javascript SQLError 19唯一约束失败,javascript,sql,angularjs,cordova,network-programming,Javascript,Sql,Angularjs,Cordova,Network Programming,我在设置我的应用程序、创建本地数据库并简单地插入第一个和仅用户(已在本地登录)时遇到此错误。请参阅代码中的注释以获取错误消息 angular.module("greenApp") .service("dbService",['$q', function($q){ var db; var promise = function(){ var deferred = $q.defer(); db = window.openDatabase('green
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
只是[“用户名字符串”]
,我会收到一条错误消息,上面说:
“由于constaint失败,无法执行语句(19唯一)
约束失败:user.user)
你知道会发生什么吗?最近我刚移植到爱奥尼亚的纯科尔多瓦项目中运行和工作的代码完全相同。看起来你在代码中插入了两次……这里
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?!?
};
var insert_into=函数(args){
var queryPromise=query(“插入用户(用户)值(?)”,args);
log(“insert_into”,queryPromise)//错误消息出现在这里
返回查询(“插入到用户(用户)值(?),args);退出应用程序时,sqlite db会持续存在,因此每次启动应用程序时,它都会尝试执行插入操作。(估计它在第一次启动时起作用,第二次出现错误)
当您使用CREATE TABLE IF NOT EXISTS
时,应用程序不会在创建表时失败,而是在第一次插入时失败
您可以使用pragma user_版本来读取/写入数据库的版本,以便知道在何种情况下您必须创建表/插入值,或者数据库是否已准备就绪。您是否可以显示表结构以及您正在使用哪些dbms或您试图插入表中已存在的相同文本?您是否可以显示一些示例?我会抛出一个控制台.log语句直接在insert_into方法中,并仔细检查以确保args是您所期望的,而不是null。谢谢,但我已经这样做了,args与问题中所述的一样。user
是列名吗?是的,很抱歉写得很糟糕。错误出现在第二个查询上方虽然..再次编辑了问题,但仍然是相同的错误。如果您在此处发布之前重写代码,我们可能很难找到困扰您的问题。是的-但谁知道您还写了什么?重写内容会引入新的错误源。这是我的观点。