使用datajs从OData获取数据并保存到phonegap中的sqlite

时间:2012-09-07 22:42:29

标签: sqlite cordova datajs

我正在开发一个phonegap应用程序,它使用datajs从OData获取数据并将其保存到sqlite。 datajs工作正常,但是当我尝试将数据保存到sqlite时,我收到错误“E / Web Console(11533):未捕获错误:INVALID_STATE_ERR:DOM异常11在文件:/// android_asset / www / js / core /Sincronizacion.js:19"

这是代码:

function SincronizarClientes()  // This function runs after a button click
{
    var db = window.openDatabase("TestDb", "1.0", "TestDb - 1", 2000000);
    db.transaction(ActualizarClientes, FalloSincronizacion, OkSincronizacion);  
}  


function ActualizarClientes(tx)
{

    OData.read("http://192.168.0.4:30003/TeyunaServices.svc/Clientes?$filter=EQUIPO eq 'T1' and startswith(NOM_UCLIENTE, 'MIGUEL') eq true",
    function (data, request) {
        var html = "", sql = "";
        for (var i = 0; i < data.results.length; i++) {
            html += "<div>" + data.results[i].NOM_UCLIENTE + "</div>";
            sql = "INSERT OR REPLACE INTO Clientes (Cod_UCliente, Nom_UCliente, Fecha_Actualizacion) VALUES ('" + data.results[i].COD_UCLIENTE + 
                          "','" + data.results[i].NOM_UCLIENTE + "', datetime())";
            //sql = "INSERT OR REPLACE INTO Clientes (Cod_UCliente, Nom_UCliente, Fecha_Actualizacion) VALUES ('00012125', 'PEDRO PEREZ PINTO', datetime())";              
            tx.executeSql(sql);  //This is line 19
            alert(sql);
        }
        document.getElementById("mainContent").innerHTML = sql;

        alert("Los clientes se actualizaron correctamente!");
    },  function(err) {
            alert("Error occurred " + err.message);
        }
    );   
}

// Transaction error callback
//    
function FalloSincronizacion(tx, err) {
    alert("Error actualizando los clientes: " + err);
}

// Transaction success callback
//
function OkSincronizacion() {

}

1 个答案:

答案 0 :(得分:1)

INVALID_STATE_ERR 是SQLite错误。

我猜你的OData回调函数在SincronizarClientes()返回后异步运行,因此事务tx已经关闭。

改为在回调函数中调用db.transaction()