重复插入 WebSQL
Duplicate insert WebSQL
我有一个简单的脚本,我需要循环遍历一些 json 数据并将其插入到我的 WebSQL 数据库中,因为该行尚不存在。
以下代码可以解决问题:
var name;
var dbSize = 5 * 1024 * 1024; // 5MB
var db;
db = openDatabase("db", "", "Woonscan Database", dbSize, function() {
console.log('db successfully opened or created');
});
var json = [{"Project":{"id":"10","name":"Promens Care","archive":"0"}}, {"Project":{"id":"12","name":"Woonconcept","archive":"0"}}];
var project_id, name;
db.transaction(function (tx) {
tx.executeSql('DROP TABLE IF EXISTS projects');
tx.executeSql("CREATE TABLE IF NOT EXISTS projects (ID INTEGER PRIMARY KEY ASC, project_id INTEGER, name TEXT)");
insertRow = function(project_id, name){
db.transaction(function (tx) {
tx.executeSql("INSERT INTO projects(project_id, name) VALUES (?, ?)", [project_id, name]);
});
}
for(var i=0;i < json.length;i++) {
console.log(JSON.stringify(json));
project_id = json[i].Project.id;
name = json[i].Project.name;
tx.executeSql("SELECT * FROM projects WHERE project_id = ?", [project_id], function(tx, result){
console.log(result);
// console.log(result.rows.item(0));
var len = result.rows.length;
if(len == 0){
console.log(JSON.stringify(result));
insertRow(project_id, name);
} else{
console.log('Row exists: ' + JSON.stringify(result));
}
});
}
});
在我的情况下,JSON-对象有 2 个子对象(ID:10 和 ID:12),for 循环遍历它并插入。但是,第二个插入包含第一个插入的值。 console.log 或警报会向我打印正确的值,所以我现在有点迷路了。我是不是哪里犯了大错..?
However, the second insert contains the values of the first insert.
这里有多个问题。主要是您在一个事务中打开另一个事务(在已经在事务中的循环中插入被调用的行)。
I need to loop through some json data and insert this inside my
WebSQL db it the row doesn't exist already.
处理这个问题的最佳方法** - 做到这一点
使用Insert or Replace
代替简单的Insert
insertRow = function(project_id, name){
db.transaction(function (tx) {
tx.executeSql("INSERT OR REPLACE INTO projects(project_id, name) VALUES (?, ?)", [project_id, name]);
});
}
无需检查该值是否已存在。
我有一个简单的脚本,我需要循环遍历一些 json 数据并将其插入到我的 WebSQL 数据库中,因为该行尚不存在。
以下代码可以解决问题:
var name;
var dbSize = 5 * 1024 * 1024; // 5MB
var db;
db = openDatabase("db", "", "Woonscan Database", dbSize, function() {
console.log('db successfully opened or created');
});
var json = [{"Project":{"id":"10","name":"Promens Care","archive":"0"}}, {"Project":{"id":"12","name":"Woonconcept","archive":"0"}}];
var project_id, name;
db.transaction(function (tx) {
tx.executeSql('DROP TABLE IF EXISTS projects');
tx.executeSql("CREATE TABLE IF NOT EXISTS projects (ID INTEGER PRIMARY KEY ASC, project_id INTEGER, name TEXT)");
insertRow = function(project_id, name){
db.transaction(function (tx) {
tx.executeSql("INSERT INTO projects(project_id, name) VALUES (?, ?)", [project_id, name]);
});
}
for(var i=0;i < json.length;i++) {
console.log(JSON.stringify(json));
project_id = json[i].Project.id;
name = json[i].Project.name;
tx.executeSql("SELECT * FROM projects WHERE project_id = ?", [project_id], function(tx, result){
console.log(result);
// console.log(result.rows.item(0));
var len = result.rows.length;
if(len == 0){
console.log(JSON.stringify(result));
insertRow(project_id, name);
} else{
console.log('Row exists: ' + JSON.stringify(result));
}
});
}
});
在我的情况下,JSON-对象有 2 个子对象(ID:10 和 ID:12),for 循环遍历它并插入。但是,第二个插入包含第一个插入的值。 console.log 或警报会向我打印正确的值,所以我现在有点迷路了。我是不是哪里犯了大错..?
However, the second insert contains the values of the first insert.
这里有多个问题。主要是您在一个事务中打开另一个事务(在已经在事务中的循环中插入被调用的行)。
I need to loop through some json data and insert this inside my WebSQL db it the row doesn't exist already.
处理这个问题的最佳方法** - 做到这一点
使用Insert or Replace
代替简单的Insert
insertRow = function(project_id, name){
db.transaction(function (tx) {
tx.executeSql("INSERT OR REPLACE INTO projects(project_id, name) VALUES (?, ?)", [project_id, name]);
});
}
无需检查该值是否已存在。