javascript - Mobile Safari HTML5 WebSQL SQLTransaction 抛出 SQLError code=1 消息 ='not an error' ,事务失败

标签 javascript iphone html mobile-safari

我正在尝试从使用 (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/

相关文章:

html - Emacs 组织模式 : specify raw area for HTML exporter

javascript - 如何克隆有已缓存过滤器的画架位图。

javascript - 在指令 Controller 中使用编译时,在模板中非法使用 ngTransinclude 指令

iphone - 如何移动 CGPath 而不创建新的

ios - 从 XCode 下载共享 App Group Container

iphone - 无法找到 Base SDK 下拉 - Xcode 4.2

html - "Clear:Both;"不清除 float 的 div

javascript - 使用 HTML5 Canvas 进行 OCR

javascript - 将视频替换为错误的图像

javascript - 单击事件在 jQuery 插件中无法正常工作