Как удалить базу данных в WebSQL программно?
Я новичок в база данных Web SQL и я использую его для сохранения данных в локальной базе данных на веб-странице.
Я могу создать a база данных by
var db = openDatabase('database', '1.0', 'my database', 2 * 1024 * 1024);
и я создать a таблица при этом
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS mytable (blah,blah)');
});
Я могу удалить the таблица by
db.transaction(function (tx) {
tx.executeSql('DROP TABLE mytable');
});
но есть ли способ, чтобы удалить database
программно?
9 ответов
Spec говорит:
4.1 баз данных
каждый источник имеет связанный набор баз данных. Каждая база данных имеет имя и текущую версию. невозможно перечислить или удалить базы данных доступно для источника из этого API.
использование PersistenceJS существует постоянство.сбросьте API,который очистит базу данных. Сайт PersistenceJS
для целей разработки / тестирования вы можете просматривать содержимое и удалять webSQL, IndexedDB, cookies и т. д., ища свое доменное имя по этому URL-адресу в Chrome:
chrome://settings/cookies
там вы можете удалить все хранилища для домена или только некоторые локальные объекты хранения. Да, URL подразумевает только "cookies" , но интерфейс по этому URL включает все типы автономного хранилища.
было бы здорово, если бы интерфейс инструментов разработчика Chrome имел возможность щелкнуть правой кнопкой мыши и удалить объект хранения данных на вкладке "ресурсы" вместе с проверкой содержимого. Но пока все, что я знаю, это URL-адрес настроек/cookies.
Я разрабатываю приложение phonegap+jquery-mobile+KO с автономным хранилищем с использованием веб-sql через persistencejs и jasmine js для BDD.
Я работаю над каким-то" очистителем базы данных", который будет выполняться после каждой спецификации. Когда я искал, как удалить веб-базу данных sql, я прочитал ответ https://stackoverflow.com/a/10929725/667598 (в этом потоке/вопросе) и пошел посмотреть, что находится в этом каталоге (Mac OS X).
cd ~/Library/Application\ Support/Google/Chrome/Default/databases
внутри вы увидите База данных.база данных db SQLite3 и каталоги для каждого источника. Эти каталоги называются шаблоном protocol_host_somenumber (я не знаю, что это за число). Так, например, в моем случае, поскольку мои приложения-это просто файлы, которые я открываю в Google Chrome с протоколом file:///..., я вижу каталог file__0. И для twitter, и я также могу увидеть http_twitter.com_0 и https_twitter.com_0.
внутри этих каталогов все имена файлов являются просто номерами. Например, в файле__0 я найден файл под названием 8 и 9. В моем случае эти файлы являются базой данных websql. Я не знаю, есть ли также индексированные базы данных DB в chrome Default/databases
реж.
С этими именами немного трудно догадаться, что такое база данных. Вы можете открыть базу данных, и вам нужно будет вывести приложение или сайт через его таблицы и данные.
к счастью, базы данных.db, о котором я упоминал ранее, - это сопоставление между этими файлами с номерами и базами данных.
вы можете откройте базы данных.db и любой другой веб-файл sql с командой sqlite3
sqlite3 Databases.db
очевидно, что внутри оболочки sqlite3 удобно иметь некоторые знания SQL. Во всяком случае, это также всегда удобно некоторая помощь, которая доступна через команду
.help
С помощью команды .tables
вы можете перечислить таблицы в базе данных. Внутри этой базы данных.БД мы можем найти таблицы баз данных и мета. Важным является база данных, поэтому с
select * from Databases;
мы видим сопоставление между базами данных и их файлами. Например
7|http_jquerymobile.com_0|testdb|html5 тест db / 200000
8|файл__0|elfaro_dev|базы данных де-де ElFaro пункт развития|734003200
первый столбец-это идентификатор таблицы, которая является номером, используемым для имен файлов БД, второй-источник (каталог), другие столбцы-это имя БД, описание БД и оценочное размер, используемый при создании БД из Javascript API.
Итак, чтобы фактически удалить базу данных, я удалил ее из этой таблицы, например:
delete from Databases where id = 8
а затем удалите фактический файл из файловой системы (вне оболочки sqlite3)
rm file__0/8
и это все.
PS:я знаю, что это слишком длинный ответ для простой темы, но мне просто нужно было смыть это из моей системы и создать резервную копию где-то так или блог.
файлы localdatabase хранятся в настройках пользователя Windows в разделе данные приложения > Google > Chrome > данные пользователя > по умолчанию > базы данных.
поэтому их удаление вручную теоретически возможно. Это полезно только при тестировании/разработке на вашем компьютере, так как когда другой пользователь открывает ваше приложение / сайт, он вряд ли будет иметь доступ к файловой системе.
однако, даже если вы можете найти файлы и удалить их, данные остаются. Я пробовал с Chrome открыт и закрыт, и все процессы chrome закончились, и все же инспектор браузера продолжает показывать мне мою старую базу данных со всеми нежелательными полями и данными в ней.
Параметры разработчика
нет возможности перечислить или удалить базы данных программно (пока).
Разработчики Chrome могут перейти к chrome://settings/cookies
поиск и удаление любой базе данных
Разработчики Opera могут перейти к opera://settings/cookies
единственный способ действительно удалить базу данных (и все остальное)
новая Spec говорит, что это возможно в характеристика с заголовком ответа и javascript. Этот недостатки это то, что вы не можете контролировать то, что удаляется, поэтому вам нужно будет создать резервную копию в первую очередь, если вы не хотите очистить все
2.1.3. Параметр хранения
параметр storage указывает, что сервер желает удалить локально сохраненные данные, связанные с источником url-адреса конкретного ответа. Это включает в себя механизмы хранения, такие как (localStorage, sessionStorage, [INDEXEDDB], [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")
});
на это отвечают в хранение базы данных HTML5 (SQL lite) - несколько вопросов.
подведем итоги:
- в настоящее время нет способа удалить базу данных WebSQL.
- возможно, вместо этого используйте индексированную БД или localStorage.
на моя библиотека реализация, я просто удаляю все таблицы. Которые, действительно, удаляют базу данных. Список таблиц select * from sqlite_master
.
обратите внимание, что если вы используете несколько
tx.executeSql('DROP TABLE mytable');
операторы в одном и том же обратном вызове транзакции затем убедитесь, что они все существуют или рассмотрите возможность использования синтаксиса DROP TABLE IF EXISTS. Если даже одна таблица не существует, когда вы пытаетесь удалить ее, это приведет к сбою всей транзакции. Этот сбой приводит к откату транзакции и означает, что данные останутся в вашей базе данных, даже если вы думали, что они должны быть удалены. Ошибки нет сообщается, если вы специально не прослушиваете его в 4-м аргументе executeSql, который является обратным вызовом ошибки. Это намеренное поведение, но, по моему опыту, сбивает с толку.
нет способа удалить существующую базу данных в websql, она очистится, когда кэш будет очищен или
Браузер закрыт. Если вы хотите создать базу данных с тем же именем, просто используйте метод openDatabase, он сначала проверит наличие базы данных с тем же именем. Если не существует, он создаст его, иначе он откроет существующий
пожалуйста, перейдите по этой ссылке http://html5doctor.com/introducing-web-sql-databases/