websql used tutorialspoint the mdn executesql example javascript sql google-chrome google-chrome-extension web-sql

javascript - used - ¿Cómo eliminar una base de datos en WebSQL programáticamente?



websql vs indexeddb (9)

Las opciones de desarrollador

No hay forma de enumerar o eliminar las bases de datos programáticamente (todavía).
Los desarrolladores de Chrome pueden navegar a chrome://settings/cookies search y borrar cualquier base de datos que los desarrolladores de Opera puedan navegar en opera://settings/cookies

La única forma de eliminar realmente una base de datos (y todo lo demás)

Una nueva Spec dice que esto podría ser posible en la función con encabezado de respuesta y javascript. Las desventajas son que no puede controlar lo que se está eliminando, por lo que tendría que crear una copia de seguridad antes que nada, a menos que desee borrar todo

2.1.3. El parámetro de almacenamiento

El parámetro de almacenamiento indica que el servidor desea eliminar datos almacenados localmente asociados con el origen de la url de una respuesta particular. Esto incluye mechansims de almacenamiento tales como ( localStorage, sessionStorage, [INDEXEDDB], [WEBDATABASE], etc. ), así como mechainsm tangencialmente relacionado como registros de trabajadores de servicio.

Js:

navigator.storage.clear({ types: [ "storage" ], includeSubdomains: true // false by default });

Encabezado de respuesta:

res.header("Clear-Site-Data", "storage; includeSubdomains");

Pero esto aún no está disponible para ningún navegador ...

La mejor solución para los clientes (no para los desarrolladores)

/* 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); }); }

Uso

dropDatabase("database", function(){ console.log("done") });

Soy nuevo en la base de datos web SQL y la utilizo para guardar datos en una base de datos local en una página web.

Puedo crear una base de datos por

var db = openDatabase(''database'', ''1.0'', ''my database'', 2 * 1024 * 1024);

y puedo crear una tabla haciendo esto

db.transaction(function (tx) { tx.executeSql(''CREATE TABLE IF NOT EXISTS mytable (blah,blah)''); });

Puedo eliminar la tabla por

db.transaction(function (tx) { tx.executeSql(''DROP TABLE mytable''); });

pero ¿hay alguna manera de eliminar la database programáticamente?


En la implementación de mi biblioteca , simplemente elimino todas las tablas. Que, de hecho, eliminar la base de datos. La lista de tablas es select * from sqlite_master .



Estoy desarrollando una aplicación phonegap + jquery-mobile + KO con almacenamiento sin conexión usando web sql a través de persistencejs, y jasmine js para BDD.

Estoy trabajando en algún tipo de "limpiador de base de datos" para ser ejecutado después de cada especificación. Cuando estaba buscando cómo eliminar una base de datos web sql, leí la respuesta https://.com/a/10929725/667598 (en este hilo / pregunta) y fui a ver qué hay en ese directorio (Mac OS X) .

cd ~/Library/Application/ Support/Google/Chrome/Default/databases

En el interior verá una base de datos Databases.db SQLite3 y directorios para cada origen. Estos directorios se nombran con el patrón protocol_host_somenumber (no sé cuál es ese número). Entonces, por ejemplo, en mi caso, dado que mis aplicaciones son solo archivos que abro en Google Chrome con el protocolo file: /// ..., puedo ver un directorio de archivo__0. Y para Twitter y también puedo ver un http_twitter.com_0 y un https_twitter.com_0.

Dentro de estos directorios, todos los nombres de archivo son solo números. Por ejemplo, dentro del archivo__0 encontré un archivo llamado 8 y otro llamado 9. En mi caso, estos archivos son base de datos websql. No sé si también hay bases de datos de DB indexadas en el directorio por Default/databases datos de Chrome.

Con estos nombres es un poco difícil de adivinar qué base de datos es qué. Puede abrir la base de datos y deberá inferir la aplicación o el sitio a través de sus tablas y datos.

Afortunadamente, las bases de datos.db que mencioné antes es una asignación entre los archivos nombrados con números y las bases de datos.

Puede abrir las bases de datos.db y cualquier otro archivo web sql con el comando sqlite3

sqlite3 Databases.db

Obviamente, una vez dentro del shell sqlite3, es útil tener algunos conocimientos de SQL. De todos modos, también es siempre útil algo de ayuda, que está disponible a través del comando

.help

Con el comando .tables puede listar tablas en la base de datos. Dentro de estas Bases de Datos.db podemos encontrar las tablas Bases de Datos y meta. El importante es las bases de datos, por lo que con

select * from Databases;

podemos ver el mapeo entre las bases de datos y sus archivos. Por ejemplo

7 | http_jquerymobile.com_0 | testdb | html5 test db | 200000

8 | archivo__0 | elfaro_dev | Base de datos de ElFaro para desarrollo | 734003200

La primera columna es la identificación de la tabla que es el número utilizado para los nombres de archivo db, el segundo es el origen (el directorio), las otras columnas son el nombre db, la descripción db y el tamaño estimado utilizado al crear el db desde el API de Javascript

Así que para eliminar una base de datos, lo que hice fue borrarlo de esta tabla, por ejemplo:

delete from Databases where id = 8

Y luego borre el archivo real del sistema de archivos (fuera del shell sqlite3)

rm file__0/8

Y eso es.

PD: Sé que esta es una respuesta demasiado larga para un tema simple, pero solo necesitaba eliminar esto de mi sistema y respaldarlo en algún lugar como SO o un blog.


Los archivos de base de datos locales se almacenan en la configuración de usuario de Windows en Datos de aplicación> Google> Chrome> Datos de usuario> Predeterminado> bases de datos.

Entonces, eliminarlos manualmente es teóricamente posible. Esto solo es útil mientras se prueba / desarrolla en su propia computadora, ya que cuando otro usuario abre su aplicación / sitio, es poco probable que tenga acceso al sistema de archivos.

Sin embargo, aunque puede encontrar los archivos y eliminarlos, los datos se quedan. Lo he intentado con Chrome tanto abierto como cerrado y todos los procesos de Chrome han finalizado, y sin embargo, el inspector del navegador me sigue mostrando mi antigua base de datos con todos los campos y datos no deseados.


Ningún método para eliminar la base de datos existente en websql se borrará cuando se borre la caché o
El navegador está cerrado. Si desea crear una base de datos con el mismo nombre, simplemente use openDatabase Method. Primero comprobará la existencia de la base de datos con el mismo nombre. Si no existe, creará uno; de lo contrario, abrirá el existente.

por favor, siga este enlace http://html5doctor.com/introducing-web-sql-databases/


Tenga en cuenta que si usa múltiples

tx.executeSql(''DROP TABLE mytable'');

las declaraciones en la misma devolución de llamada de la transacción luego asegúrese de que todas existan o considere usar la sintaxis DROP TABLE IF EXISTS en su lugar. Si ni siquiera existe una tabla cuando intentas eliminarla, se producirá un error en la transacción completa. Esta falla da como resultado una reversión de la transacción y significa que los datos permanecerán en su base de datos incluso cuando pensó que debería haberse eliminado. No se informa ningún error a menos que esté específicamente escuchándolo en el cuarto argumento de executeSql, que es una devolución de llamada por error. Este es un comportamiento intencionado pero, en mi experiencia, es confuso.


Usando PersistenceJS hay una API persistence.reset que limpiará la base de datos. Sitio PersistenceJS

Para fines de desarrollo / prueba, puede ver el contenido y eliminar webSQL, IndexedDB, cookies, etc. al buscar su nombre de dominio en esta URL en Chrome:

chrome://settings/cookies

Allí, puede eliminar todo el almacenamiento de un dominio o solo ciertas entidades de almacenamiento local. Sí, la URL implica solo ''cookies'', pero la interfaz en esta URL incluye todos los tipos de almacenamiento sin conexión.

Sería genial, creo que si la interfaz de herramientas de desarrollador de Chrome tuviera la capacidad de hacer clic derecho y eliminar una entidad de almacenamiento de datos en la pestaña Recursos junto con la inspección del contenido. Pero por ahora, todo lo que sé es la URL de configuración / cookies.


Spec dice:

4.1 Bases de datos

Cada origen tiene un conjunto asociado de bases de datos. Cada base de datos tiene un nombre y una versión actual. No hay forma de enumerar o eliminar las bases de datos disponibles para un origen de esta API.