我正在开发一个需要读写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);
}
但由于某种原因,我无法使嵌套查询起作用。有什么想法吗?