【问题标题】:Why can't I connect to my SQLite database using indexedDB.open?为什么我不能使用 indexedDB.open 连接到我的 SQLite 数据库?
【发布时间】:2016-12-27 03:11:39
【问题描述】:

我有一个 Sqlite 数据库。我想通过 indexedDB 连接到我的文件。 我也尝试了 indexedDB,它在配置文件中创建了新的 sqlite 文件。这个新的 sqlite 文件有一个名为“database”的表。此表包含我的文件名。

我的源代码是:

var indexedDB = window.indexedDB 
    || window.webkitIndexedDB 
    || window.mozIndexedDB
    || window.msIndexedDB;

var db;
var request = indexedDB.open("rule");
request.onerror = function(evt) {
  console.log("Database error code: " + evt.target.errorCode);
};
request.onsuccess = function(evt) {
  console.log("Database connect success");
  db = request.result;
};

代码运行时,db 变量为空。

【问题讨论】:

  • 从未尝试过,但我认为这不可能以您想要的方式。据我所知,你只能通过使用 open with version 方法并在 js 代码中初始化结构来创建 indexeddb 数据库。

标签: sqlite indexeddb


【解决方案1】:

这是不可能的。

虽然Firefox stores its own IndexedDB databases in an SQLite format,您不能直接查询或访问这些数据库。相反,您需要使用异步 IDB API。

【讨论】:

  • 感谢您的帮助,但我在 Firefox 浏览器中连接到自己的数据库。 IDB API 没有帮助我...
  • 不... :( 我可以使用 Storage API 吗?
  • @samira,我认为您不了解 StackOverflow 的工作原理。仅仅因为答案不是您要找的答案并不意味着它不正确。当您有与您提出的问题不同的问题时,您会发布一个新问题。
【解决方案2】:

如果我正确理解您的问题,您有一个预先存在的 SQLite 数据库,并且您正在尝试使用 IndexedDB 连接到它?

正如编辑在他的回答中所说,这是不可能IndexedDB 不是用于访问数据库的通用接口。这个名字有点欺骗性,IndexedDB 不是关系数据库;它实际上允许您在浏览器中创建 Object Stores 来存储 JavaScript 对象。这些存储是使用 JavaScript 在浏览器中创建的,Firefox 中的当前实现确实将 IndexedDB 数据存储在 SQLite 数据库中,但 the spec 不需要这样做,每个浏览器都可以在幕后存储他们喜欢的数据。其他浏览器和 Firefox 的未来版本可能会也可能不会使用 SQLite,这并不重要,因为 IndexedDB 不提供对它使用的后端数据库的访问。即使是当前在 Firefox 中的实现也不仅仅依赖于 SQLite,它存储了诸如 FileBlob 对象 separate from the SQLite DB 之类的东西。

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 2017-10-10
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多