标签: web-sql

使用HTML 5 Web SQL数据库时数据存储在何处

我刚读了一些关于HTML 5 Web SQL数据库的内容.我在这里和谷歌进行了一些搜索,但找不到一个简单的答案.

有人能告诉我,使用它时存储的数据在哪里?在内存或文本文件或其他东西?

什么浏览器支持这个?

html5 web-sql

10
推荐指数
2
解决办法
2万
查看次数

SECURITY_ERR:openDatabase上的DOM异常18

我有一个基于Web的Android应用程序,它使用WebSQL进行存储.出于某种原因,openDatabase在一个点上调用(响应按钮单击)会导致DOMException带有消息"SECURITY_ERR: DOM Exception 18".

请注意,我没有使用PhoneGap.

我在这里问的主要问题是:DOMException 18的可能原因什么openDatabase

更多细节:仅当数据库尚不存在时才会发生此异常.如果它已经存在,它按预期工作.进行openDatabase调用的函数在应用程序的另一部分中使用,并且运行正常.

到目前为止我尝试过的:

  • 减少数据库的大小 - 应该不是问题,因为它是由应用程序的另一部分创建的.
  • 我已经检查了外部存储权限 - 再次,不应该是一个问题.
  • 我在某处读到插入的USB电缆可能会导致此问题 - 而不是在这种情况下导致它的原因.

编辑: 这是命令的样子:

db = openDatabase('my_database', '1.0', 'My database description', 5*1024*1024, function() {});
Run Code Online (Sandbox Code Playgroud)

html5 android web-sql opendatabase

9
推荐指数
1
解决办法
3004
查看次数

window.openDatabase()和window.sqlitePlugin.openDatabase()函数之间的区别?

使用Cordova版本3.x和Android版本2.x到4.x.

我想知道:

  1. 我的理解是正确的,默认情况下所有Android设备都有一个用于创建sqlite数据库的sqlite程序/接口吗?
  2. 上述数据库函数调用是否都在设备中创建了一个sqlite数据库?
  3. 如果上面的答案为,那么上述函数调用创建的数据库类型是什么?
  4. 如果答案是肯定的,那么window.sqlite.openDatabase()函数包装器是window.openDatabase()什么?
  5. 调用创建的数据库是否持久?也就是说,关闭并重新打开cordova打包应用程序后,数据是否可用?
  6. 是否有上述两种方法可以创建的最大数据库大小?

sqlite android web-sql phonegap-plugins cordova

9
推荐指数
1
解决办法
1万
查看次数

我们什么时候应该使用Web SQL或IndexedDB?有哪些用例?

最近,我遇到了浏览器提供的Web SQL和IndexedDB。我想了解可以使用的用例。

google-chrome web-sql indexeddb

9
推荐指数
2
解决办法
2964
查看次数

8
推荐指数
4
解决办法
5450
查看次数

for循环中的Javascript WebSQL查询.怎么知道什么时候完成?

我想我有一个相对简单的问题,但我一直在思考,甚至​​谷歌也没有给我一个我可以使用的答案.

基本上我试图复制一些使用WebSQL本地存储的记录.复制不是问题,但我需要知道在我的程序可以继续之前所有复制操作何时完成.

WebSQL调用是异步的,所以我通常做这些事情的唯一方法就是使用回调函数.但是,因为查询是在for循环中完成的,所以我不能使用回调函数,因为它将在第一个完成的查询中触发,如代码中所示.

代码如下:

function copyRecords(old_parent_id, new_parent_id, callback){
    var db = openDatabase('test', '1.0', 'test', 50 * 1024 * 1024);
    db.transaction(function (tx) {
        tx.executeSql('SELECT * FROM table WHERE parent_id = ?', [old_parent_id], function(tx, results){
            for(var i = 0; i < results.rows.length; i++){
                db.transaction(function (tx2) {
                    tx2.executeSql('INSERT INTO table (name, parent_id) VALUES (?, ?)', [results.rows.item(i).name, new_parent_id], callback);
                })
            }
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过调用回调函数i == results.rows.length,但这并不能确保所有查询都完成.

我猜你们之前有些人遇到过同样的问题,所以任何有关如何解决这个问题的帮助,并确保只在for循环完成时才调用回调函数,我们非常感激.

先感谢您.

javascript for-loop web-sql

8
推荐指数
1
解决办法
4056
查看次数

如何使WebSQL查询同步?

考虑:

var globalvar;

function viewyearmain() {
  db.transaction(function (tx) 
  {
    tx.executeSql('SELECT * FROM BUDGET WHERE holdingtype="month"', [], function (tx, results) 
    {
       var len = results.rows.length;
       msg = len;
       globalvar = msg;
    }, null);

  });

  if (globalvar>0)
  {
    alert("ROWS FOUND");
  }
  else
  {
    alert("ROWS NOT FOUND");
  }
}
Run Code Online (Sandbox Code Playgroud)

ROWS NOT FOUND出现的问题是因为if到达语句时事务尚未完成.

javascript sqlite asynchronous synchronous web-sql

8
推荐指数
2
解决办法
1万
查看次数

IndexedDB性能和IndexedDB v/s WebSQL性能比较

WebSQL和IndexedDB都是用于访问(CRUD)Web浏览器中底层嵌入式数据库的DB API.其中,如果我是正确的,就像SQL一样访问(CRUD)任何客户端 - 服务器数据库,如Oracle等(在许多情况下,WebSQL和IndexedDB的支持在同一浏览器上可用)

  1. 那么,这是否意味着WebSQL和IndexedDB都在访问(CRUD)相同的底层嵌入式数据库,如果是这样,那么它将在所有Web浏览器上具有相同的性能!
  2. 但我认为情况并非如此,那么它是否意味着Web浏览器将拥有多个底层嵌入式数据库?为什么在同一个浏览器中应该有2个底层嵌入式数据库?

而且由于WebSQL和IndexedDB都是API,所以它意味着说WebSQL和IndexedDB的性能并不完全正确(因为它们更像是查询/访问语言),但它在很大程度上取决于底层嵌入式数据库的性能.而且,根据Google的说法,LevelDB比SQLite更快

  1. 是否正确地说它不是WebSQL和IndexedDB之间的性能差异,而是底层嵌入式数据库的性能?
  2. IE,Chrome,Android浏览器的底层嵌入式数据库是什么?我无法在网上找到这些信息,是否有人发现或编译过它?

browser sqlite web-sql indexeddb leveldb

8
推荐指数
1
解决办法
1万
查看次数

如何在Web SQL中执行多个语句?

有没有办法在单个事务中执行多个语句?我想做的事情如下:

db.transaction(function (tx) {
    tx.executeSql(
        "CREATE TABLE Foo(ID INTEGER); CREATE TABLE Bar(ID INTEGER)",
        function (tx, result) {
            alert("success!");
        });
    });
Run Code Online (Sandbox Code Playgroud)

但相反,我发现我必须做这样的事情:

db.transaction(function (tx) {
    tx.executeSql("CREATE TABLE Foo(ID INTEGER)");
    tx.executeSql("CREATE TABLE Bar(ID INTEGER)",
        function (tx, result) {
            alert("success!");
        });
    });
Run Code Online (Sandbox Code Playgroud)

我是否仅限于在自己的事务中执行单个语句,然后在最后一个事务中触发successFn,或者有没有办法在单个事务中执行多个语句?

web-sql

7
推荐指数
1
解决办法
3262
查看次数

Quasar Framework - 存储本地持久数据(对于 Web、Cordova 和 Electron 平台)最安全的方法是什么?

假设我想覆盖所有平台(Web、Electron 和 Cordova),离线存储数据最安全的方式是什么。

我问的原因是,我的应用程序 Fudget(它是 Cordova / Electron - 但不是 Quasar)使用 WebSQL 在本地存储用户的应用程序数据。这种方法多年来一直运行良好(我偶尔有一个 Android 用户,其数据会被 Android 操作系统擦除 - 但并不经常)。

但在过去的几天里,数百名 Android 用户的 WebSQL(和本地存储)被删除(有人知道为什么吗?),所以我收到了很多来自那些丢失了所有数据的人发来的愤怒电子邮件,设置。

我目前正在开发《Fudget 2》(使用 Quasar),并希望确保这种情况不会再次发生。我想要覆盖所有平台(Web、Mac、Windows、iOS、Android),并且想要将数据存储在本地 JavaScript 对象中,那么对于所有这些平台来说,在本地存储这些数据的最安全方法是什么?

显然,本地存储和 WebSQL(无论如何现在已被弃用)似乎并不安全。但是,例如,我可以安全地使用 IndexedDB 吗?这会永远持续下去吗?

或者我是否需要为每个平台集成一些适当的本机数据存储(例如,使用Cordova 的cordova-plugin-nativestorage 插件,以及 Electron 的类似插件)?如果是这种情况,我该如何处理 Web 平台呢?

persistent-storage local-database web-sql indexeddb quasar-framework

7
推荐指数
1
解决办法
3951
查看次数