Phonegap executeSql失败的可能原因。查询是正确的,但有时会失败

时间:2013-05-06 09:53:42

标签: android cordova jquery-mobile phonegap-build

我正在开发一个需要保存签名的项目(Image Base 64)。目前它的工作正常,但由于不明原因,有时在100%中有2%失败。

      $(document).ready(function() {    
            var db = window.openDatabase("TEST", "1.0", "TEST", 20000000 );
            db.transaction(insertSignature, errorCB, insertSignatureSuccess);

            function insertSignature(tx)
            {
                var signature               = $.trim($('#sig').val());
                var signature_laps          = $('#signature_laps').val();
                var signature_attempts      = $('#signature_attempts').val();
                var sql = 'UPDATE signature_table SET signature = "'+signature+'", signature_lap = "'+signature_laps+'", signature_attempt = "'+signature_attempts+'", modified_date = datetime("now", "localtime")' + 
                        ' WHERE cust_code = "'+cust_code+'" AND cycle_month = "'+month+'" AND cycle_year = "'+year+'"';
                tx.executeSql(sql);
            }

            function insertSignatureSuccess(tx)
            {
                alert('success');
            }

            function errorCB(err) 
            {
               alert('failed');
            }
    });

WHERE

签名变量包含base64图像

signature_laps & signature_attempts 变量包含整数

cust_code & 只是重要的关键参数

ON SQLITE

签名字段是BLOB

在100%的2%中,2%的失败仍然表示成功,即使签名不是保存但是当我再次尝试相同的笔划时它成功保存。即使查询未成功执行,为什么仍然继续成功消息?它应该继续失败的消息。这是一个手机错误吗?

我在android ICS和jquery mobile下运行了phonegap。

有什么想法吗?提前谢谢你们。

1 个答案:

答案 0 :(得分:0)

我不知道是否是错误的原因,但是使用SQL命令你最好按如下方式说明:

var sql='UPDATE signature_table SET signature = ?, signature_lap = ?, ' + 
'signature_attempt = ?, modified_date = datetime("now", "localtime") ' + 
'WHERE cust_code = ? AND cycle_month = ? AND cycle_year = ?';
tx.executeSql(sql, [signature, signature_laps, signature_attempts, cust_code, month, year]);

另外,看到这种情况,将成功和回调函数放在事务中似乎是可取的:

tx.executeSql(sql, [signature, signature_laps, signature_attempts, cust_code, month, year], insertSignatureSuccess, errorCB);