我正在将我的大问题分解成几个可以解决的问题。 我正在练习Javascript / SQL交互 - 并且在第三个障碍时失败,正在插入数据:
var databaseOptions = {
fileName: "sqlite_WAtest",
version: "1.0",
displayName: "SQLite WA Test",
maxSize: 1024
}; // End databaseOptions
var database = openDatabase(
databaseOptions.fileName,
databaseOptions.version,
databaseOptions.displayName,
databaseOptions.maxSize
); // End database
database.transaction(
function( transaction ){
// Create our table if it doesn't exist
transaction.executeSql(
"CREATE TABLE IF NOT EXISTS WORKOUTS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, WOdate, WOtype);");
},function(){
alert('error Creating!');
},function(){
alert('success Creating');
}
); // end database.transaction
// Try and insert dummy info into table
database.transaction(
function( transaction ){
// Insert the data
transaction.executeSql('INSERT INTO WORKOUTS (WOdate, WOtype) VALUES ("Test 1","Test 2")');
},function(){
alert('error inserting!');
},function(){
alert('success inserting');
}
); // end database.transaction
当我加载此页面时,警报会显示“成功创建!” - 好消息。
然而,我接着“插入错误”=不是那么好消息。
错误是表WORKOUTS中没有名为WOdate的列。
我已经重写了几次INSERT代码,但我无法按照我的预期工作。我正在Safari Storage窗口中跟踪表格,没有数据进入表格。
任何人都可以对此有所了解吗?
编辑:问题是我已经有一张没有正确列的表。为了我的实验,我添加了这个代码,使代码工作:
// Delete the table before running - because I'm testing
// This is needed
//
database.transaction(
function( transaction ){
// Drop table
transaction.executeSql(
"DROP TABLE WORKOUTS");
},function(err){
alert('error Dropping: ' + err.code + '; Message: ' + err.message);
},function(){
alert('success Dropping');
}
); // end database.transaction
这里有两个经验教训: 1)错误回调处理 - 使用.code和.message属性并标记这些属性。帮助缩小问题范围。 2)在测试/构建时要小心现有数据