208 • Глава 6
Итак, мы использовали третий аргумент метода
executeSql
, обратный вызов для случая
успешного завершения. Этот обратный вызов получает объект транзакции (так же, как
и обратный вызов транзакции, что позволяет при необходимости выполнить еще один
метод
executeSql
) и, что еще важнее, результирующий набор. Результирующий набор
включает три атрибута:
1)
insertId
(устанавливается, только если вы вставили одну или несколько строк) —
в данном примере я его не использовал;
2)
rowsAffected
— так как это оператор
SELECT
, данное значение равно
0
;
3)
rows
— это не массив, это коллекция, в которой есть указание на ее длину и содержится
метод извлечения элемента. Мы работаем с объектом строк в цикле
for
от 0 до значе-
ния, равного длине коллекции, а получить отдельные строки нам позволяет
results.
rows.item(i)
. Отдельная строка — это объект, представляющий столбы с различными
названиями; таким образом,
results.rows.item(0).screen_name
дает нам содержимое
поля
screen_name
из первой строки.
Наконец, после того как мы прошли по всем подходящим строкам, можно сформировать
элемент
для HTML-кода. В нашем примере элемент
содержится в переменной
с именем
tweetEl
.
Далее приведен полный листинг кода, включающий распознавание поддержки баз данных
и код обработки щелчков для переключателей: