javascript - 在 HTML5 Javascript sqlite 上的表上插入之前如何检查数据是否已经存在?

标签 javascript html sqlite

我正在开发一个 Web 应用程序,它使用 HTML5/Javascript sqlite 抓取网站 RSS 提要并将其保存到数据库中。

这是我的代码

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");
        }

}

这是函数 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;
    }
}

但它不起作用 oldPost 总是返回“undefined”,通过我的控制台日志记录,我看到 localDB.transaction 在函数返回“oldPost”变量值后被处理。我该如何解决这个问题?

最佳答案

如何重构 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 + ".");
            }
    });               
}

关于javascript - 在 HTML5 Javascript sqlite 上的表上插入之前如何检查数据是否已经存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15461250/

相关文章:

spring - SQLITE 和外键支持

javascript - DOM 设置图像源

javascript - 任何人都可以从子 iframe 关闭由 Jquery 插件 bPopup 生成的弹出窗口?

javascript - Safari、JavaScript 和复制到系统剪贴板

html - 修复 CSS 右边框和左边框问题

html - 如何水平对齐 Font Awesome 5 中的分层图标?

javascript - 如何从 Blazor C# 代码调用静态 JavaScript 方法

HTML5 原生输入类型 ="time"元素,如何在 Chrome 中定位伪元素/样式下拉列表?

sqlite - 使用 SQLite 如何索引 CREATE TABLE 语句中的列?

android - 使用 Robolectric 和 ORMLite 进行测试时使用模拟数据库