mmqq834533 2014-07-03 08:50 采纳率: 0%
浏览 1090

Javascript操作SQLite中的函数执行问题

首先是现有的问题描述——
当前流程
我通过Ajax取到一组数据,然后在Ajax的回调函数中,操作SQLite,如果本地数据库中(通过ID查找)没有这组数据,就Insert;如果有,就更新本地数据库里的条目。
存在问题
我的Insert方法是可以正常运行的。但是Update方法就会在实际运行时直接被跳过。
核心代码如下

db.transaction(function(con){
        con.executeSql('SELECT * FROM ' + uname + ' WHERE appid=' + APP_ID,[],function(con,res){
            if(res.rows.length <= 0){//如果有数据
                addData(uname, APP_ID, 1, 0, APP_NAME_CN, ICON_PATH, VERSION, APP_COMPANY, ACTIVITY.toLowerCase());}
            else{//没有数据
                isDown = (res.rows.item(0).isDown == 1);
                sql = 'UPDATE ' + uname + ' SET name = "' + APP_NAME_CN + '",icon = "' + ICON_PATH + '", ver = ' + VERSION + ', comp = "' + APP_COMPANY + '", schemeUrl = "' + ACTIVITY.toLowerCase() + '" WHERE appid = ' + APP_ID;
                db.transaction(function(con1){
                    con1.executeSql(sql,function(con2,res2){
                        alert("!")
                    },function(con3,error3){
                        alert("添加数据出错!")
                    })
                });
//                updateData(uname, APP_ID,APP_NAME_CN, ICON_PATH, VERSION, APP_COMPANY, ACTIVITY.toLowerCase());//这是原有的函数,被我拉到这个文件中了
            }
        })
    });``` 
**另外**
整个项目是用原生代码写的,不能使用框架和其他引用。
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 05:54
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你提到的问题可能是因为你在SQL语句中使用了=(等于)运算符,而不是IN(包含)运算符。如果你的数据集不包含特定值,那么=运算符会返回false,导致update语句不会被执行。

    为了解决这个问题,你可以修改你的updateData函数来检查是否有数据匹配特定条件:

    function updateData(uname, APP_ID, APP_NAME_CN, ICON_PATH, VERSION, APP_COMPANY, ACTIVITY.toLowerCase()) {
        var sql = 'UPDATE ' + uname + ' SET name = "' + APP_NAME_CN + '", icon = "' + ICON_PATH + '", ver = ' + VERSION + ', comp = "' + APP_COMPANY + '", schemeUrl = "' + ACTIVITY.toLowerCase() + '" WHERE appid = ' + APP_ID;
        db.transaction(function(con) {
            con.executeSql(sql, function(con, res) {
                console.log('Update executed successfully');
            }, function(error) {
                console.error('Error executing update: ' + error.message);
            });
        });
    }
    

    这样,当数据库中有匹配的行时,update语句将被执行。如果没有匹配的行,它将不会被调用。

    评论

报告相同问题?