使用钛appcelerator中的json将远程mysql数据插入到sqlite中

时间:2014-01-06 13:35:34

标签: android mysql sqlite titanium appcelerator

我正在尝试从服务器获取远程mysql数据以插入sqlite数据库

我已经阅读了here的教程,其中使用json数组显示远程数据。我想将mysql数据插入存储在手机上的sqlite数据库中。我在钛appcelerator开发应用程序。我采取的参考是来自here我一直在寻找一个简单的教程,但找不到我的问题是使用教程我已经能够显示我之前插入的应用程序中的远程数据和本地数据在sqlite db中。但是,当我尝试将远程数据从mysql db插入sqlite db时,它不会插入。我正在使用tuorial为mysql提供的相同数据库并在sqlite中创建了一个simlar数据库.db的结构是相同的id,整数和阴影,文本

我正在尝试的代码是

var win = Ti.UI.Createwindow;

var db = Ti.Database.install('titanium_json_db.sqlite','colors');
    //db.execute('CREATE TABLE IF NOT EXISTS DATA (id INTEGER, shade TEXT)');
    var resultSet = db.execute('SELECT * FROM colors');


if(resultSet.rowCount < 1){
alert("no records");
    while(resultSet.isValidRow()){
var xhr = Ti.Network.createHTTPClient(); 

xhr.open('GET', 'http://192.168.0.xxx/Titanium-Mobile_Database-Driven_Source/read.php');
xhr.send();


xhr.onload = function(){
        var json = JSON.parse(this.responseText);
        if (json) { 
        Titanium.API.info('Error - Null return!');
        alert("json error");
        return;
        }

        for(var i=0; i < json.colors.length; i++){
        db.execute('INSERT INTO colors (id, shade) VALUES(?,?)',json.colors[i].id,json.colors[i].shade);

        };

    };
};
};    

win.open();

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

您的XHR请求永远不会执行。

if(resultSet.rowCount < 1){
alert("no records");
    while(resultSet.isValidRow()){

如果结果集没有行,则会发出“no records”警告,如果有一个有效的返回行,它会有条件地执行XHR。

该代码块可以重写如下:

var rows = [];
if(rows.length < 1) {
    alert('No rows!');
    if (rows[0]) {
        rows.push('Never going to happen.');
    }
}

注意XHR请求是异步的也很重要。 while循环不会等待请求在继续之前完成。

答案 1 :(得分:0)

实际上我解决了你使用的代码是正确的问题,这是一个逻辑错误。应该没有使用if条件这里是我的代码可能对尝试的人有用

var currentWin = Ti.UI.currentWindow;
var sendit = Ti.Network.createHTTPClient();
sendit.open('GET', 'http://192.168.0.xxx/Remote_LBR/read.php');
sendit.send();
sendit.onload = function(){
    var json = JSON.parse(this.responseText);
    alert("json parsed");
    var json = json.tablename;

    var dataArray = [];

    var pos;
    alert("for loop started");

    // db.execute("DROP TABLE IF EXISTS tablename");

    for( pos=0; pos < json.length; pos++){

        dataArray.push({id:'' + json[pos].id + ''},{title:'' + json[pos].Title + ''}, {title:'' + json[pos].Latitude + ''}, {title:'' + json[pos].Longitude + ''}, {title:'' + json[pos].Description + ''}, {Approved:'' + json[pos].Approved + ''});
        // set the array to the tableView
        tableview.setData(dataArray);
     var db = Ti.Database.install('LBR_Local.sqlite','tablename_local');    


    db.execute('INSERT INTO tablename(id, Title, Latitude, Longitude, Description, Approved) VALUES("'+ json[pos].id +'", "'+ json[pos].Title +'", "'+ json[pos].Latitude +'", "'+ json[pos].Longitude +'", "'+ json[pos].Description +'", "'+ json[pos].Approved +'")');

    alert("Rows Inserted");

    };
    alert("for loop ended");

};

var tableview = Ti.UI.createTableView({
});

currentWin.add(tableview);
setData(dataArray);
Ti.App.addEventListener('reload',setData);