如何使sqlite数据库调用并将返回值存储到变量

时间:2013-11-15 14:55:54

标签: javascript jquery sqlite

我需要将C#代码转换为JavaScript,并且我遇到了异步数据库调用。 我是JavaScript的新手,我不知道如何解决这个问题。我知道必须使用回调函数,但我只是不知道如何编写它。我已经尝试了一些我在这个网站上找到但没有成功的例子。 如果有人可以帮助我,请帮助。

我在项目中有2个表。让我们说表1 表2 。 Table1是父表,Table2是包含Table1项的子项。 它们与id连接。

表1 (Id,userid,Col1,Col2)

表2 (Id,Col1,Col2,Col3)

数据存储在SQL LITE数据库中,我需要调用该数据并以JSON格式发送。

我有下一个代码。

var Table1row = {};
var Table1Array = [];
var Table2row = {};
var Table2Array = [];

function GetTable1()
{ 
     try 
     {  
    db.transaction(
             function(transaction) 
             { 
                 transaction.executeSql('SELECT * FROM Table1 WHERE userid  = ?',
         [userid],  DataHandlerTable1, txError);
             });
     } 
     catch(e) 
     {
         console.log(e.message);
     }  
}
function DataHandlerTable1 (tx,results)
{   
    var len = results.rows.length;    
    if(len > 0)      
    {
         for(var i=0; i<len; i++)
         {
             row = results.rows.item(i);

             Table1row ["id"] = row.id;         
             Table1row ["userid"] = row.userid;
             Table1row ["Col1"] = row.Col1;
             Table1row ["Col2"] = row.Col2;
             Table1row ["Table2Array"] = GetTable2(row.id);

            Table1Array.push(Table1row);
         }

         var jsonObject = { prod: Table1Array }

            Type = "POST";
            Url = "http://192.168.136.27:54076/Service1.svc/SaveResult";
            ContentType = "application/json";
            DataType = "json";

            $.ajax({            
                type: Type, 
                url: Url, 
                contentType: ContentType, 
                data: JSON.stringify(jsonObject),
                dataType: DataType, 
                success: function (json) {                                    
                },
                error: function (jqXHR,exception) {                     
                },
            });              
     }  
}

问题出在这一行:

Table1row ["Table2Array"] = GetTable2(row.id);

这不起作用,我不知道如何在JavaScript中以其他方式编写。 我需要存储 Table1row [“Table2Array”] GetTable2()函数的返回值。

function GetTable2(id)
{
        db.transaction(function(transaction) {              
             transaction.executeSql('SELECT * FROM Table2 WHERE id  = ?', [id],   function (tx, results) {                  
                 var len = results.rows.length;
                 if(len > 0)         
                 {
                     for(var i=0; i<len; i++)
                     {
                         row = results.rows.item(i);
                         Table2row ["id"] = row.id;
                         Table2row ["Col1"] = row.Col1;    
                         Table2row ["Col2"] = row.Col2;
                         Table2row ["Col3"] = row.Col3;

                         Table2Array.push(Table2row);               
                         }

                     return Table2Array;
                     }                                                                 
             });                 
     });        
}

有关于此的任何想法?

谢谢。

1 个答案:

答案 0 :(得分:0)

您正在接近问题,听起来您不明白如何编写好的JavaScript代码。我建议你从“Javascript The Good Parts”这本书开始阅读。如果您使用的是异步代码,则需要将所有代码设置为异步。

一个粗略的想法如下。

function GetTable1(callback) {
  [...]
  transaction.executeSql('SELECT * FROM Table1 WHERE userid  = ?',
     [userid], function(tx, results) { DataHandlerTable1(tx, results, callback); }, txError);
  [...]
}
function DataHandlerTable1 (tx,results,callback) {
  [...]
  GetTable2(row.id, function(value) {
    Table1row ["Table2Array"] = value
  });
[...]
callback(jsonObject);
}
function GetTable2(id, callback) {
  [...]
  callback(Table2Array);
  return;
}

同样,假设你可以在没有对javascript语言的基本理解的情况下将c#移植到javascript上,这是一个坏主意。