无法从phone sql应用程序中的web sql数据库检索数据

问题描述:

我正在研究需要存储一些数据的iOS上的phonegap应用程序。我正在使用phonegap文档中给出的存储API,并且我相信正在插入数据。但是当我试图使用SELECT语句检索数据时,我没有在警报框中获得任何输出。无法从phone sql应用程序中的web sql数据库检索数据

显示“loading2”警报,但之后我没有得到任何输出。

我的代码如下(从PhoneGap的维基拾起):

// load the currently selected icons 
    function loadCelebs(mydb) 
    { 
     try 
     { 
      alert("loading2"); 
      mydb.transaction(
       function(transaction) 
       { 
        transaction.executeSql('SELECT * FROM celebs ORDER BY name', [], celebsDataHandler(transaction,results)); 
       }); 
     } 
     catch(e) 
     { 
      alert(e.message); 
     } 
    } 


    // callback function to retrieve the data from the prefs table 

    function celebsDataHandler(tx, results) 
    { 

     // Handle the results 
      alert(results); 

    } 
+0

“没有得到任何输出”?这是否意味着你没有得到一个警戒框?或者你得到一个没有内容的改变框? –

+0

感谢Joachim,我错误地命名了处理程序。由于我认为不同的处理程序名称,该部分未被执行。它可能在概念上是如此,但它对我有用。所以现在,我会一起去。感谢您的回复,虽然:) – ilight

尝试将其更改为:

mydb.transaction(
      function(transaction) 
      { 
       transaction.executeSql('SELECT * FROM celebs ORDER BY name', [], celebsDataHandler); 
      }); 

你不希望在与(TX,结果)的一部分transaction()调用。您只传递对回调处理程序的引用,以便它可以在完成时运行它。通过添加(tx,结果)您正在执行并传递结果。

另外,考虑传入错误处理程序。如果您知道错误是什么,它可以使调试更容易。

function errorCB(err) { 
    alert("Error processing SQL: "+err.code); 
} 


mydb.transaction(
    function(transaction) 
    { 
     transaction.executeSql('SELECT * FROM celebs ORDER BY name', errorCB, celebsDataHandler); 
    } 
); 
+0

是的,我正在处理错误的处理程序。保持处理程序名称始终为我工作。所以我使用“事务”作为处理程序的名称,而不是使用“事务”有时和“其他时间”使用“TX”。我认为处理程序可以只有一个名称,不同于范围变量。 – ilight