我目前遇到的问题是,当我尝试插入数据时,我收到的错误是表列不存在,但我已经定义了它。我目前已将此问题隔离,并决定手动插入数据。一旦我通过提醒('手动插入数据'),弹出窗口会显示Error was could not prepare statement (1 table expenses has no column named expenseDate) (Code 5)
。
我已经使用了这些SQL语句并在SQLite3数据库中对它们进行了测试,一切都很好。有趣的是,当我访问我的开发者控制台 - >资源选项卡时,我看不到我的表格。
任何帮助都将不胜感激。
我的js在下面:
var shortName='TravelExpenseReporting';
var version='0.1';
var displayName='TravelExpenseReporting';
var maxSize = 65536;
db = openDatabase(shortName,version,displayName,maxSize);
try {
db.transaction(
function(transaction) {
transaction.executeSql(
'CREATE TABLE IF NOT EXISTS expenses ' +
'(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ' +
'type TEXT NOT NULL, ' + 'amount DOUBLE NOT NULL, ' +
'vendor TEXT NOT NULL, ' + 'expensedate DATE NOT NULL);'
);
}
); // END transaction()
} catch(e) {
alert('error: ' + e);
return;
}
alert('inserting data manually');
try {
db.transaction(
function(transaction) {
transaction.executeSql(
'INSERT INTO expenses (type,amount,vendor,expensedate) VALUES (?,?,?,?);',
['expenseType',100,'vendor','01/01/2004'],
null,
errorHandler
);
}
); // END transaction()
} catch(e) {
alert('error: ' + e);
return;
}
答案 0 :(得分:0)
问题是你没有正确处理错误。您不应该使用try / catch来获取错误。 事实上,transaction()函数是异步的:它意味着如果程序继续运行而event()函数没有完成它的工作。因此,当您看到“手动插入数据”警报时,事务()不应该完成。
事务方法采用2个函数参数:一个在请求成功时执行,一个在请求失败时执行:
db.transaction(
function(transaction) {
// success
// put your requests
},
function(error) {
// error
System.out.println(error);
}
);
现在,您将能够看到错误。
由于transaction()方法是异步的,因此您应该注意在创建表请求之前不执行插入请求。因此,您应该将所有请求放在同一个事务中:
db.transaction(
function(transaction) {
//create table
//insert
},
function(error) {
System.out.println(error);
}
);