3

SQL lite テーブルに値を挿入する Phonegap で作成された基本的なコードがあります。しかし、このアクションのボタンを押そうとすると、ログに「Uncaught ReferenceError: dbb is not defined at file:///android_asset/www/index.html:116」というメッセージが表示されます。html ファイル内のすべてのコードは次のとおりです。

<!DOCTYPE HTML>
<html>
<head>
<meta name="viewport" content="width=default-width; user-scalable=no" />
   <meta http-equiv="Content-type" content="text/html;charset=utf-8">

   <title>Embedded Sql Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova-2.2.0.js"></script>

        <script type="text/javascript" charset="utf-8" src="js/jquery-1.8.2.js"></script>

<!-- main scripts used in this example -->
 <script type="text/javascript" charset="utf-8">

var db;
var shortName = 'WebSqlDB';
var version = '1.0';
var displayName = 'WebSqlDB';
var maxSize = 65535;

function errorHandler(transaction, error) {
   alert('Error: ' + error.message + ' code: ' + error.code);

}

function successCallBack() {
   alert("DEBUGGING: success");

}

function nullHandler(){};


function onBodyLoad(){

alert("DEBUGGING: we are in the onBodyLoad() function");

 if (!window.openDatabase) {

   alert('Databases are not supported in this browser.');
   return;
 }

 db = openDatabase(shortName, version, displayName,maxSize);

 db.transaction(function(tx){

  // you can uncomment this next line if you want the User table to be empty each time the application runs
  // tx.executeSql( 'DROP TABLE User',nullHandler,nullHandler);

   tx.executeSql( 'CREATE TABLE IF NOT EXISTS User(UserId INTEGER NOT NULL PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL)', [],nullHandler,errorHandler);
 },errorHandler,successCallBack);

}

function ListDBValues() {

 if (!window.openDatabase) {
  alert('Databases are not supported in this browser.');
  return;
 }

 $('#lbUsers').html('');

 db.transaction(function(transaction) {
   transaction.executeSql('SELECT * FROM User;', [],
     function(transaction, result) {
      if (result != null && result.rows != null) {
        for (var i = 0; i < result.rows.length; i++) {
          var row = result.rows.item(i);
          $('#lbUsers').append('<br>' + row.UserId + '. ' +
row.FirstName+ ' ' + row.LastName);
        }
      }
     },errorHandler);
 },errorHandler,nullHandler);

 return;

}

function AddValueToDB() {

 if (!window.openDatabase) {
   alert('Databases are not supported in this browser.');
   return;
 }

 db.transaction(function(transaction) {
   transaction.executeSql('INSERT INTO User(FirstName, LastName) VALUES (?,?)',[$('#txFirstName').val(), $('#txLastName').val()], nullHandler,errorHandler);
   });

 ListDBValues();

 return false;

}

</script>
</head>
<body onload="onBodyLoad();">
<h1>WebSQL</h1>
<input id="txFirstName" type="text" placeholder="FirstName">
<input id="txLastName" type="text" placeholder="Last Name">
<input type="button" value="Add record" onClick="AddValueToDB();">
<input type="button" value="Refresh" onClick="ListDBValues();"> <br>
<br>
<span style="font-weight:bold;">Currently stored values:</span>
<span id="lbUsers"></span>
</body>
</html> 

どんな助けでも大歓迎です。

4

1 に答える 1

0

したがって、openDatabaseを問題なく呼び出すように見えます。ただし、Cordova( http://docs.phonegap.com/en/2.2.0/cordova_storage_storage.md.html#openDatabase )のサンプルを見ると、この例ではdevicereadyイベントをリッスンしていることがわかります。体がロードされるのを待つよりも。devicereadyイベントが発生すると、CordovaAPIを使用する準備ができたことを意味します。本体が読み込まれると、WebClientがページの読み込みを完了したことを意味しますが、他のすべての準備ができていることを保証するものではありません。

于 2012-12-14T16:16:59.437 に答える