在移动应用程序中使用Javascript读/写Sqlite的问题

时间:2012-11-27 04:23:35

标签: javascript sqlite jquery-mobile mobile web-sql

我正在开发一个需要读写Web SQL数据库的jQuery移动应用程序。这是我自己做的第一个大小合适的应用程序,我似乎无法弄清楚为什么它不起作用。我搜索了很多论坛,看了很多幻灯片,展示了如何正确地做到这一点,但我仍然必须遗漏一些东西。

有人可以看看我的代码,并指出我正确的方向,我在哪里出错了?此代码段取自导入到我的.html文件的.js文件(custom.js)。

function enterNames() {
  var collectionOfNames = document.getElementsByName("playerName");
  var collectionOfColours = document.getElementsByName("playerColour");
  for (var i = 0; i < numberOfPlayers; i++) {
    var pName = "";
    var pColour = "";
    pName = collectionOfNames[i].value;
    pColour = collectionOfColours[i].value;
    golfDB.transaction(
      function (transaction) {
        transaction.executeSql("SELECT golferID FROM golfer WHERE golferName = ?;",
        [pName],
        function (tx, results) {
          if (results.rows.length > 0) {
            var aRow = results.rows.item(0);
            playerID[i] = parseInt(aRow['golferID'].toString());
          } else {
            golfDB.transaction(
              function (transaction2) {
                transaction2.executeSql(
                  "INSERT INTO golfer (golferName, colourID) VALUES (?,?);",
                  [pName, pColour],
                  function (tx1, results1) {
                    tx1.executeSql("SELECT golferID FROM golfer WHERE golferName = ?;",
                    [pName],
                    function (tx2, results2) {
                      var aRow2 = results.rows.item(0);
                      playerID[i] = parseInt(aRow2['golferID'].toString());
                    },
                    errorHandler);
                  },
                  errorHandler
                );
              }
            );
          }
        },
        errorHandler);
      }
    );
  }
  var dateTime = new Date();
  // insert into database
  golfDB.transaction(
    function (transaction) {
      transaction.executeSql(
        "INSERT INTO game (numberOfPlayers,dateTime,gameCompleted) VALUES (?,?,?);",
        [numberOfPlayers, dateTime, GAME_IN_PROGRESS],
        null, 
        errorHandler
      );
    }
  );
  // get gameID
  golfDB.transaction(
    function (transaction) {
      transaction.executeSql("SELECT gameID FROM game ORDER BY gameID DESC;", [dateTime], getGameID, errorHandler);
    }
  );
  gameInProgress = true;
  // get holeID
  if (playing18holes) {
    golfDB.transaction(
      function(transaction) {
        transaction.executeSql(
          "SELECT holeID FROM hole WHERE courseID = ? OR courseID = ? ORDER BY holeID;",
          [currentCourseID, nextCourseNumber],
          getHoleIDs,
          errorHandler
        );
      }
    );
    alert("Playing 18 holes");
  } else {
    golfDB.transaction(
      function(transaction) {
        transaction.executeSql(
          "SELECT holeID FROM hole WHERE courseID = ? ORDER BY holeID;",
          [currentCourseID],
          getHoleIDs,
          errorHandler
        );
      }
    );
    alert("Playing 9 holes");
  }
  // populate the game table
  setHoleInformation();
}

我已经能够创建数据库了:

var golfDB = openDatabase('golfDB', '1.0', 'golf DB', 100 * 1024);

创建表格,插入这些表格:

function runSqlQuery(sqlString, callback) {
  golfDB.transaction(
    function (transaction) {
      transaction.executeSql(sqlString, [], callback, errorHandler);
    }
  );
}
function createTables() {
  runSqlQuery("CREATE TABLE IF NOT EXISTS colour (colourID INTEGER, colourName VARCHAR(45));", null);
  runSqlQuery("INSERT INTO colour (colourID,colourName) SELECT 1, 'gold' UNION SELECT 2,'blue' UNION SELECT 3,'white' UNION SELECT 4,'red';", null);
}

但由于某种原因,我无法使嵌套查询起作用。有什么想法吗?

0 个答案:

没有答案