HTML5 Web SQL Database

Статус Web SQL:API Web SQL устарел и больше не рекомендуется. Новые браузерные стандарты отдают предпочтение IndexedDB для клиентского хранилища. Web SQL по-прежнему поддерживается только в некоторых старых браузерах.

Альтернатива: Поскольку будущее Web SQL неопределённо и он больше не имеет широкой поддержки, рекомендуется перейти на IndexedDB — современный браузерный API, поддерживающий транзакции и хранение пар ключ-значение.

API Web SQL Database не является частью спецификации HTML5, а представляет собой независимую спецификацию, которая вводит набор API для использования SQL для работы с клиентскими базами данных.

Если вы программист веб-бэкенда, вам будет легко понять операции SQL.

Вы также можете обратиться к нашемуучебнику по SQL, чтобы узнать больше об операциях с базами данных.

Web SQL Database работает в последних версиях браузеров Safari, Chrome и Opera.


Основные методы

Ниже приведены три основных метода, определённых в спецификации:

  1. openDatabase: Этот метод создаёт объект базы данных, используя существующую базу данных или только что созданную базу данных.
  2. transaction: Этот метод позволяет нам управлять транзакцией и выполнять commit или rollback в зависимости от ситуации.
  3. executeSql: Этот метод используется для выполнения фактических SQL-запросов.

Открытие базы данных

Мы можем использовать метод openDatabase() для открытия существующей базы данных. Если база данных не существует, будет создана новая база данных. Код использования выглядит следующим образом:

var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);

Пять параметров метода openDatabase() описываются следующим образом:

  1. Имя базы данных
  2. Номер версии
  3. Текст описания
  4. Размер базы данных
  5. Функция обратного вызова при создании

Пятый параметр, функция обратного вызова при создании, будет вызвана после создания базы данных.


Выполнение операций запроса

Используйте функцию database.transaction() для выполнения операций:

var db = openDatabase('mydb', '1.0', 'Тестовая БД', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); });

После выполнения приведённой выше инструкции в базе данных 'mydb' будет создана таблица с именем LOGS.


Вставка данных

После выполнения приведённой выше инструкции создания таблицы мы можем вставить некоторые данные:

var db = openDatabase('mydb', '1.0', 'Тестовая БД', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "Example Tutorial")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.example.com")'); });

Мы также можем использовать динамические значения для вставки данных:

var db = openDatabase('mydb', '1.0', 'Тестовая БД', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id,log) VALUES (?, ?)', [e_id, e_log]); });

В примере e_id и e_log — внешние переменные. executeSql сопоставляет каждый элемент в параметре массива с "?".


Чтение данных

В следующем примере показано, как читать данные, которые уже существуют в базе данных:

var db = openDatabase('mydb', '1.0', 'Тестовая БД', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "Example Tutorial")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.example.com")'); }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>Запрос количества записей:" + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ alert(results.rows.item(i).log ); } }, null); });

Полный пример

Пример

var db = openDatabase('mydb', '1.0', 'Тестовая БД', 2 * 1024 * 1024); var msg; db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "Example Tutorial")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.example.com")'); msg = '<p>Таблица данных создана, и две записи были вставлены.</p>'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>Запрос количества записей:" + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; document.querySelector('#status').innerHTML += msg; } }, null); });

Попробуйте сами »

Результат выполнения приведенного выше примера показан на следующем рисунке:


Удаление записей

Формат удаления записей выглядит следующим образом:

db.transaction(function (tx) {
    tx.executeSql('DELETE FROM LOGS  WHERE id=1');
});

id указанных данных для удаления также может быть динамическим:

db.transaction(function(tx) {
    tx.executeSql('DELETE FROM LOGS WHERE id=?', [id]);
});

Обновление записей

Формат обновления записей следующий:

db.transaction(function (tx) {
    tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=2');
});

id указанных данных для обновления также может быть динамическим:

db.transaction(function(tx) {
    tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=?', [id]);
});

Полный пример

Пример

var db = openDatabase('mydb', '1.0', 'Тестовая БД', 2 * 1024 * 1024); var msg; db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "Example Tutorial")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "www.example.com")'); msg = '<p>Таблица данных создана, и две записи были вставлены.</p>'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('DELETE FROM LOGS WHERE id=1'); msg = '<p>Удалите запись с id 1.</p>'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('UPDATE LOGS SET log=\'www.w3cschool.cc\' WHERE id=2'); msg = '<p>Обновите запись с id 2.</p>'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>Запрос количества записей:" + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; document.querySelector('#status').innerHTML += msg; } }, null); });

Попробуйте сами »

Результат выполнения приведенного выше примера показан на следующем рисунке:

Другие расширения