gpt4 book ai didi

Javascript 数据库事务错误无法准备语句没有列

转载 作者:行者123 更新时间:2023-11-28 03:21:56 25 4
gpt4 key购买 nike

我目前遇到一个问题,当我尝试插入数据时,我收到一个错误,指出表格列不存在但我已经定义了它。我目前已经隔离了问题并决定手动插入数据。一旦我通过我的警报(“手动插入数据”),一个弹出窗口显示 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;

最佳答案

问题是您没有正确处理错误。您不应该使用 try/catch 来获取错误。事实上,transaction() 函数是异步的:这意味着如果程序继续运行而 transaction() 函数没有完成它的工作。因此,当您看到“手动插入数据”警报时,transaction() 应该没有完成。

事务方法有两个函数参数:一个在请求成功时执行,一个在请求失败时执行:

 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);
}
);

关于Javascript 数据库事务错误无法准备语句没有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24005855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com