【问题标题】:get remote mysql data inserted into sqlite using json in titanium appclerator使用钛appcelerator中的json将远程mysql数据插入sqlite
【发布时间】:2014-01-06 13:35:34
【问题描述】:

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

我已经阅读了来自here 的教程,其中远程数据使用 json 数组显示。我想将mysql数据插入存储在手机上的sqlite db中。我正在用钛加速器开发应用程序。我的参考来自here 我一直在寻找一个简单的教程,但找不到任何我的问题是使用教程我已经能够从我之前插入的应用程序中显示远程数据和本地数据sqlite 数据库。但是,当我尝试将远程数据从 mysql db 插入到 sqlite db 时,它不会被插入。我正在使用教程为 mysql 提供的相同数据库,并在 sqlite 中创建了一个类似的数据库。两个 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();

任何帮助都会很棒。

【问题讨论】:

    标签: android mysql sqlite titanium appcelerator


    【解决方案1】:

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

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

    如果结果集没有行,则提示“无记录”,如果有有效的返回行,则有条件地执行 XHR。

    该代码块可以重写如下:

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

    同样重要的是要注意 XHR 请求是异步的。 while 循环不会等待请求完成后再继续。

    【讨论】:

      【解决方案2】:

      实际上我解决了你是对的问题,我使用的代码是,这是一个逻辑错误。不应该在这里使用 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 2014-03-13
        相关资源
        最近更新 更多