[英]How to check if data already exists before inserting on a table on HTML5 Javascript sqlite?
I'm developing a web application that grabs a website RSS feed and save it into a database, using HTML5/Javascript sqlite. 我正在开发一个Web应用程序,该应用程序使用HTML5 / Javascript sqlite获取网站RSS提要并将其保存到数据库中。
This is my code 这是我的代码
function createPosts(title,author,content,contentSnippet,publishedDate,img_destaque){
var oldPost = checkIfExists(publishedDate);
console.log(oldPost);
if(!oldPost){
var query = "insert into mytable (titulo, data, autor, img_destaque,descricao,postagem) VALUES (?, ?, ?, ?, ?, ?);";
try {
localDB.transaction(function(transaction){
transaction.executeSql(query, [title, publishedDate, author, img_destaque, contentSnippet, content], function(transaction, results){
if (!results.rowsAffected) {
updateStatus("Error, not data inserted");
}
else {
updateStatus("Data inserted, id: " + results.insertId);
}
}, errorHandler);
});
}
catch (e) {
updateStatus("Error: " + e + ".");
}
}
else{
updateStatus("Error: Post already exists");
}
}
And this is the function checkIfExists 这是功能checkIfExists
function checkIfExists(publishedDate){
var query = "SELECT * FROM mytable;";
var returnStatus;
try {
localDB.transaction(function(transaction){
transaction.executeSql(query, [], function(transaction, results){
for (var i = 0; i < results.rows.length; i++) {
var row = results.rows.item(i);
if(publishedDate === row.data){
console.log(publishedDate+' '+row.data);
returnStatus = true;
}
}
if(i == results.rows.length){
returnStatus = false;
}
}, function(transaction, result){
returnStatus = true;
}, function(transaction, error){
updateStatus("Erro: " + error.code + "<br>Mensagem: " + error.message);
returnStatus = true;
});
});
}
catch (e) {
updateStatus("Error: SELECT não realizado " + e + ".");
returnStatus = true;
}
finally{
console.log(returnStatus);
return returnStatus;
}
}
But it's not working oldPost is always returning "undefined", and with my console logging I see that localDB.transaction is processed after the function returns the "oldPost" variable value. 但是它不起作用,oldPost总是返回“ undefined”,通过控制台日志记录,我看到在函数返回“ oldPost”变量值之后处理了localDB.transaction。 How do I solve this? 我该如何解决?
how about refactoring checkifExists
to take two callbacks and use a where clause to the sql rather then doing the search in javascript so 如何重构checkifExists
以接受两个回调并在SQL中使用where子句,而不是在javascript中进行搜索,因此
function checkIfExists(publishedDate,callbacktrue,callbackfalse){
var query = "SELECT * FROM mytable WHERE data=?;";
try {
localDB.transaction(function(transaction){
transaction.executeSql(query, [publishedDate], function(transaction, results){
if(results.rows.length > 0){
callbacktrue();
} else {
callbackfalse();
}
}, function(transaction, result){
callbacktrue();
}, function(transaction, error){
updateStatus("Erro: " + error.code + "<br>Mensagem: " + error.message);
callbacktrue();
});
});
}
catch (e) {
updateStatus("Error: SELECT não realizado " + e + ".");
callbacktrue();
}
}
function createPosts(title,author,content,contentSnippet,publishedDate,img_destaque){
checkIfExists(publishedDate,function(){
updateStatus("Error: Post already exists");
},function(){
var query = "insert into mytable (titulo, data, autor, img_destaque,descricao,postagem) VALUES (?, ?, ?, ?, ?, ?);";
try {
localDB.transaction(function(transaction){
transaction.executeSql(query, [title, publishedDate, author, img_destaque, contentSnippet, content], function(transaction, results){
if (!results.rowsAffected) {
updateStatus("Error, not data inserted");
}
else {
updateStatus("Data inserted, id: " + results.insertId);
}
}, errorHandler);
});
}
catch (e) {
updateStatus("Error: " + e + ".");
}
});
}
can use: 可以使用:
<input type="text" name="name" class="text_cs">
<span class="result"></span> </br>
Data:<span class="data-id">123,43,52,15</span>
and javascript: 和javascript:
$('.text_cs').on('change', function(){
var pid = $(this).val();
var table = $('.data-id');
if(table.html().split(",").indexOf(pid) != -1) {
$('.result').html("ID exist");
}
else {
$('.result').html("Not exist");
}
}); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.