Safari(WebKit). Database storage.
Дальше всех в поддержке стандарта хранения пошли разработчики WebKit.
В Safari реализовано локальное хранение в базе данных SQLite.
Набор операций включает в себя CREATE TABLE, INSERT, SELECT, REPLACE, индексы и многое другое, с рядом ограничений безопасности (например, нет LOAD DATA INFILE).
В отличие от DOM Storage и userData, этот интерфейс асинхронный. Все функции запросов к базе данных принимают в качестве аргументов две функции: callback - для обработки результатов и errback - для обработки ошибок.
Когда запрос завершается, вызывается один из этих обработчиков.
Продемонстрируем это на тестовой базе.
db = openDatabase("Test", "1.0", "Webkit Storage Example")
db.transaction(function(tx) {
tx.executeSql(
"CREATE TABLE IF NOT EXISTS test (key TEXT, value TEXT, unique(key))", [], function(tx, result) { alert("Success!") }, function(tx, error) { alert("Failure: "+error.message }
)
})
Сложновато с первого взгляда?
db.transaction создает транзакцию и передает ее функции-аргументу.
Код внутри function(tx) выполняется в одной транзакции.
Вызов tx.executeSql принимает аргументы:
Следующий пример демонстрирует обработку запроса.
db.transaction(function(tx) {
tx.executeSql("SELECT value FROM test WHERE key=?", [key], function(tx,result) {
alert("Количество результатов: "+result.rows.length)
alert("Поле value первого результата: "+ result.rows.item(0).value)
}, function(tx, error) { alert("Error!") }
)
})