【问题标题】:Cordova SQLitePlugin having the "images" table not found未找到“图像”表的 Cordova SQLitePlugin
【发布时间】:2014-07-31 10:05:45
【问题描述】:

我实际上正在开发一个正在读取(而不是写入).mbtiles 文件的cordova 应用程序。那是一个用瓦片归档的数据库,以便显示带有传单的离线地图。

与文件(称为 test.mbtiles)有关的一切都在工作:下载和打开。但是还有一个大问题。我无法阅读表格。这是我的代码的非功能示例:

getTileUrl: function (tilePoint, callBack) {
    var x = tilePoint.x;
    var y = tilePoint.y;
    var z = tilePoint.z;

    var base64Prefix = 'data:image/png;base64,';

    var db2 = new window.sqlitePlugin.openDatabase({name: 'test.mbtiles'});

    db2.transaction(function(tx) {

        tx.executeSql("SELECT tile_data FROM images INNER JOIN map ON images.tile_id = map.tile_id WHERE zoom_level = ? AND tile_column = ? AND tile_row = ?", [z, x, y], function (tx, res) {

                if(res.rows.length>0) {
                    console.log("success");
                    var src = base64Prefix + res.rows.item(0).tile_data;
                    callBack(src);
                }
                else {
                    console.log("response : no data");
                }
                }, function (tx, er) {
                    console.log('error with executeSql : ', er.message);
                    return;
                });
            });
   }

所以现在每次我尝试使用离线地图(使用设备上存在的 test.mbtiles 中的图块)时,我都会收到此错误:

error with executeSql :  no such table: images (code 1): , while compiling: SELECT tile_data FROM images INNER JOIN map ON images.tile_id = map.tile_id WHERE zoom_level = ? AND tile_column = ? AND tile_row = ?

所以我假设我得到的文件 test.mbtiles 不好,因为它没有任何 images 表。但这是错误的。我使用SQLite Database Browser来查看我的数据库方案,发现images表在这里并填充了正确的数据。

有没有其他人遇到过这个错误并且知道如何解决它?

顺便说一句,我正在使用 SQLite 插件和 Cordova 的最新版本,主要在 android 上进行测试(如果 android 工作,将移植到 ios)。并且我想尽可能只使用 .js 文件,不添加任何 java 类等(会破坏整个工作流程)。

谢谢。

【问题讨论】:

  • 你把数据库文件放到什么目录下?
  • 我正在使用文件传输和文件系统从远程服务器下载它。基本上下载代码是:ft.download(remoteFile, fs.root.toURL() + '/test.mbtiles', function (entry) {。该文件正在打开,例如我可以访问map 表。但我找不到使用images 表的方法。
  • 那么下载的文件在/目录下?您正在应用程序的目录中打开一个数据库?
  • 数据库打开似乎工作正常,因为正如我所说,我仍然可以使用map 表。但这真的不是我需要的。我会检查一些关于文件位置的事情,但我很确定我打开的文件是我之前下载的文件。如果您认为这是唯一可能出现问题的地方,我会仔细检查。
  • 您可以查询元数据表sqlite_master 例如SELECT * FROM sqlite_master WHERE type='table' 并检查该表是否存在,如果存在,它存在哪个模式?

标签: android ios sqlite cordova mbtiles


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多