Der*_*會功夫 50 javascript sql google-chrome google-chrome-extension web-sql
我是Web SQL数据库的新手,我用它来将数据保存在网页的本地数据库中.
我可以创建一个数据库,由
var db = openDatabase('database', '1.0', 'my database', 2 * 1024 * 1024);
我可以通过这样做来创建一个表
db.transaction(function (tx) {
  tx.executeSql('CREATE TABLE IF NOT EXISTS mytable (blah,blah)');
});
我可以删除该表通过
db.transaction(function (tx) {
  tx.executeSql('DROP TABLE mytable');
});
 但有没有办法以database编程方式删除?
i_a*_*i_a 49
使用PersistenceJS有一个persistence.reset API,可以清理数据库. PersistenceJS网站
出于开发/测试目的,您可以通过在Chrome中的此URL搜索您的域名来查看内容并删除webSQL,IndexedDB,Cookie等:
chrome://settings/cookies
在那里,您可以删除域的所有存储或仅删除某些本地存储实体.是的,URL仅表示"cookies",但此URL处的界面包括所有类型的脱机存储.
如果Chrome开发人员工具界面能够在"资源"选项卡中右键单击并删除数据存储实体并检查内容,那就太棒了.但就目前而言,我所知道的是设置/ cookie URL.
his*_*_py 14
我正在开发一个带有离线存储的phonegap + jquery-mobile + KO应用程序,使用web sql通过persistencejs,以及jasmine js用于BDD.
我正在研究某种"数据库清理器",以便在每个规范之后执行.当我在搜索如何删除web sql数据库时,我阅读了回复/sf/answers/765080781/(在这个帖子/问题中),然后去看看该目录中的内容(Mac OS X) .
cd ~/Library/Application\ Support/Google/Chrome/Default/databases
在里面你会看到Databases.db SQLite3数据库,以及每个源的目录.这些目录以模式protocol_host_somenumber命名(我不知道那个数字是什么).例如,在我的情况下,由于我的应用只是我在Google Chrome中使用file:/// ...协议打开的文件,因此我可以看到file__0目录.对于twitter,我也可以看到http_twitter.com_0和https_twitter.com_0.
在这个目录中,所有文件名都只是数字.例如,在file__0里面,我找到了一个名为8的文件,另一个名为9.在我的例子中,这些文件是websql数据库.我不知道chrome的Default/databases目录中是否还有索引数据库数据库.
有了这个名字,有点难以猜出数据库是什么.您可以打开数据库,并且必须通过其表和数据推断应用程序或站点.
幸运的是,我之前提到的Databases.db是用数字和数据库命名的那些文件之间的映射.
您可以使用sqlite3命令打开Databases.db和任何其他Web sql文件
sqlite3 Databases.db
显然,一旦进入sqlite3 shell,就可以得到一些SQL知识.无论如何,它总是方便一些帮助,可通过命令获得
.help
使用该命令,.tables您可以列出数据库中的表.在这个Databases.db里面我们可以找到表数据库和元数据.重要的是数据库,所以用a
select * from Databases;
我们可以看到数据库和它们的文件之间的映射.例如
7 | http_jquerymobile.com_0 | testdb | html5 test db | 200000
8 | file__0 | elfaro_dev | ElFaro para desarrollo数据库| 734003200
第一列是表的id,它是用于db文件名的数字,第二列是origin(目录),其他列是db名称,db描述和从中创建db时使用的估计大小Javascript API.
所以实际删除数据库我所做的就是从这个表中删除它,例如:
delete from Databases where id = 8
然后从文件系统中删除实际文件(在sqlite3 shell之外)
rm file__0/8
就是这样.
PS:我知道这对于一个简单的主题来说是一个太长的答案,但我只需要从我的系统中清除它并将其备份到某个地方,如SO或博客.
无法以编程方式枚举或删除数据库(尚未).
Chrome开发人员可以导航到chrome://settings/cookies搜索和删除Opera开发人员可以导航到的任何数据库opera://settings/cookies
新规格说,这可能会在可能的功能既响应头和JavaScript.的缺点是你无法控制被删除,所以,你会需要首先一切的创建备份,除非你想清楚一切
2.1.3.存储参数
存储参数指示服务器希望移除与特定响应的URL的原点相关联的本地存储的数据.这包括存储mechansims如(本地存储,sessionStorage的,[索引资料],[WEBDATABASE],等等),以及切向相关mechainsm如服务工人注册.
JS:
navigator.storage.clear({
    types: [ "storage" ],
    includeSubdomains: true // false by default
});
响应头:
res.header("Clear-Site-Data", "storage; includeSubdomains");
但这对任何浏览器都不具备......
/* This will fetch all tables from sqlite_master
 * except some few we can't delete.
 * It will then drop (delete) all tables.
 * as a final touch, it is going to change the database
 * version to "", which is the same thing you would get if
 * you would check if it the database were just created
 *
 * @param name [string] - the database to delete
 * @param cb [function] - the callback when it's done
 */
function dropDatabase(name, cb){
    // empty string means: I do not care what version, desc, size the db is
    var db = openDatabase(name, "", "", "");
    function error(tx, err){
        console.log(err);
    }
    db.transaction(ts => {
        // query all tabels from sqlite_master that we have created and can modify
        var query = "SELECT * FROM sqlite_master WHERE name NOT LIKE 'sqlite\\_%' escape '\\' AND name NOT LIKE '\\_%' escape '\\'";
        var args = [];
        var success = (tx, result) => {
            var rows, i, n, name;
            rows = result.rows;
            n = i = rows.length;
            // invokes cb once it’s called n times
            function after(){
                if (--n < 0) {
                    // Change the database version back to empty string
                    // (same as when we compear new database creations)
                    db.changeVersion(db.version, "", function(){}, error, cb);
                }
            }
            while(i--){
                // drop all tabels and calls after() each time
                name = JSON.stringify(rows.item(i).name);
                tx.executeSql('DROP TABLE ' + name, [], after, error);
            }
            // call it just 1 more extra time incase we didn't get any tabels
            after();
        };
        ts.executeSql(query, args, success, error);
    });
}
用法
dropDatabase("database", function(){
    console.log("done")
});
localdatabase文件存储在Windows数据库> Google> Chrome>用户数据>默认>数据库下的Windows用户设置中.
因此理论上可以手动删除它们.这仅在您自己的计算机上进行测试/开发时很有用,因为当另一个用户打开您的应用程序/站点时,它不太可能具有文件系统访问权限.
但是,即使您可以找到并删除它们,数据仍然存在.我已经尝试过Chrome打开和关闭以及所有Chrome进程都已结束,但浏览器检查程序一直向我显示我的旧数据库,其中包含所有不需要的字段和数据.
| 归档时间: | 
 | 
| 查看次数: | 54835 次 | 
| 最近记录: |