我正在尝试从使用 (sqlite .dump mydb > file.sql) 生成的一组 SQL 语句填充 HTML5 WebSQL 数据库
我能够读取该文件并执行所有 SQL 语句。然而,在事务结束时,事务失败并出现 SQLError(代码=1,消息='不是错误')。
现在,根据我的调查,我发现 SQLite“不是错误”是 SQLITE_DONE。
那么为什么会生成 SQLError,以及为什么我的事务会回滚?
相关的 Javascript 片段如下:
database = {
/* Transaction Error Callback */
error_callback: function(error)
{
console.log('Oops. '+error.message+' (Code '+error.code+')');
},
/* Transaction success callback */
success_callback: function()
{
console.log('apparently a success!');
},
populate_exec_sql: function(tx)
{
for (var i = 0; i < lines.length; i++) // lines = Global array of SQL statements
{
var query = lines[i].replace(/\n/g,'');
//console.log(query);
tx.executeSql(query);
}
},
populate_db: function(lines)
{
db.transaction( database.populate_exec_sql, database.error_callback, database.success_callback );
}
}
最佳答案
好的,解决方案如下。
基本上,Webkit/Safari 可能错误地处理了令人难以置信的描述性和有用的 SQLError 消息“不是错误”(可能应该被忽略)。
如果向 tx.executeSql(query) 传递一个没有 SQL 语句的字符串,会发生什么情况,它会返回一个“不是错误”的 SQLError。
就我而言,这有时是一个空字符串,有时是一个仅包含换行符\n 的字符串。
所以,我的填充函数现在看起来像这样:
populate_exec_sql: function(tx)
{
tx.executeSql('drop table if exists "color"');
tx.executeSql('drop table if exists "combo"');
tx.executeSql('drop table if exists "combo_color"');
for (var i = 0; i < lines.length; i++)
{
var query = lines[i].replace(/\n/g, ''); // strip newlines
query && query.length && tx.executeSql(query); // ignore empty lines
}
}
关于javascript - Mobile Safari HTML5 WebSQL SQLTransaction 抛出 SQLError code=1 消息 ='not an error' ,事务失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085844/