Можностей, предоставляемых веб-разработчикам



Pdf көрінісі
бет229/232
Дата06.01.2022
өлшемі5,47 Mb.
#12231
1   ...   224   225   226   227   228   229   230   231   232
204  •  Глава 6
и понимало, поддерживается ли API баз данных SQL для веб, в браузере следует также вы-
полнить соответствующий тест. Для этого 
openDatabase
 нужно обернуть оператором 
if
:
var db;
if (window.openDatabase) {
    db = openDatabase('mydb', '1.0', 'Моя первая
    ¬ база данных', 2 * 1024 * 1024);
}
Все очень просто. Дальше мы создадим в базе данных новую таблицу, для чего воспользу-
емся тем же способом, что и для выбора и обновления таблиц: через 
executeSql
.
Создание таблиц
При создании таблиц (это относится и к любым другим операциям в базе данных) нужно 
сначала запустить «транзакцию» с базой данных, а потом в обратном вызове выполнить 
соответствующий SQL-код. Обратный вызов транзакции получает аргумент, содержащий 
объект транзакции, и именно он позволяет исполнять операторы SQL и использовать 
метод 
executeSql
 (в следующем примере — 
tx
). Объект базы данных 
db
 — это объект, 
полученный от 
openDatabase
, а метод транзакции вызывается так:
var db;
if (window.openDatabase) {
    db = openDatabase('tweetdb', '1.0', 'All my tweets',
    ¬ 2 * 1024 * 1024);
    db.transaction(function (tx) {
        tx.executeSql('CREATE TABLE tweets (id, date, tweet)');
    });
}
Метод 
executeSql
 принимает четыре аргумента, из которых здесь используется только 
первый:
1.  Запрос SQL.
2.  Аргументы запроса SQL (например, значения полей).
3.  Обратный вызов при успешном завершении.
4.  Обратный вызов при ошибке.
В предыдущем примере используется только первый параметр, запрос SQL. Конечно, если 
при создании таблицы выясняется, что такая таблица уже существует, то возвращается 
ошибка, но так как вы не отлавливаете ее и на исполнение программы она не влияет, в дан-
ном случае такое развитие событий вас не волнует.
Однако на следующем шаге приложения нам нужно будет загрузить в базу данных со-
общения из Twitter, а для этого таблица должна существовать (вспомните об асинхронной 
природе API баз данных SQL для веб). Следовательно, эти сообщения должны загружаться 
в обратном вызове. Здесь и кроется проблема: если таблица уже существует, предыдущая 
транзакция завершится ошибкой, и обратный вызов из третьего аргумента выполнен не 
будет. Код сможет успешно выполниться только один раз; во второй раз ничего не полу-
чится. Чтобы обойти эту сложность, нужно запрограммировать создание таблицы только 
в том случае, если она еще не существует. Таким образом, обратный вызов, соответствую-


Хранение данных  •  205
щий успешному завершению, будет выполнен и для только что созданной таблицы, и для 
существующей, а обратный вызов для ошибки будет выполнен только в случае каких-то 
других неполадок.
var db;
if (window.openDatabase) {
    db = openDatabase('tweetdb', '1.0', 'All my tweets',
    ¬ 2 * 1024 * 1024);
    db.transaction(function (tx) {
        tx.executeSql('CREATE TABLE IF NOT EXISTS tweets
        ¬ (id, date, tweet)', [], function () {
            // теперь можно загружать в таблицу
            ¬ сообщения
        });
    });
}


Достарыңызбен бөлісу:
1   ...   224   225   226   227   228   229   230   231   232




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет