Нативный интерфейс к SQLite в плагине Cordova/PhoneGap для Android, iOS, WP(8/8.1) и Windows (8.1), с API, аналогичным HTML5/Web SQL API.
Лицензия для версий Android, WP(8) и Windows (8.1): MIT или Apache 2.0
Лицензия для версии iOS: только MIT
simple-test-windows
. Нельзя протестировать существующими наборами тестов QUnit в test-www
, так как QUnit не может выполняться на Windows (8.1+).Добавлена версия для Windows (8.1), использующая библиотеку C++ SQLite-WinRT
SQLCipher для Android и iOS теперь поддерживается плагином brodysoft / Cordova-sqlcipher-adaptor
Новый параметр location
для методов openDatabase
и deleteDatabase
для выбора расположения базы данных (iOS только) и отключения резервного копирования в iCloud
Поддержка заранее заполненных баз данных для Android и iOS теперь интегрирована, описание использования приведено ниже
Устранены проблемы совместимости с PouchDB авторства @nolanlawson## Ключевые особенности
Совместим с инструментарием Cordova 3.x и доступен через PhoneGap Build
Прямое замещение API SQL HTML5, единственное изменение должно быть window.openDatabase()
--> sqlitePlugin.openDatabase()
Безопасные вложенные транзакции с оптимизациями для пакетной обработки
Как указано в этой записи:
Поддерживает Android начиная с SDK 10 (т.е. Gingerbread, Android 2.3.3); поддержка старых версий доступна по запросу.
Возможность использовать заранее заполненные базы данных (описание использования приведено ниже).
Использование Web Workers в настоящее время не поддерживается и известно, что он сломан на Android.
Триггеры поддерживаются только для iOS и известны как сломанные на Android.
Вставка данных, которая влияет на несколько строк (например, в результате SELECT cause или использования триггеров), не сообщает правильное количество затронутых строк на Android.## Другие ограничения
Значения версии базы данных, имя базы данных и параметр размера не поддерживаются и будут проигнорированы.
SQLite плагин не будет работать до вызова обратного вызова события deviceready
, как указано в разделе Использование.
Версия Android не может работать с более чем 100 открытыми файлами базы данных из-за модели многопоточности.
UNICODE разделитель строк (\u2028
) в настоящее время не поддерживается и известен как сломанный в версии для iOS.
UNICODE символы не работают с версией WP(8).
window.sqlitePlugin.openDatabase()
(или sqlitePlugin.openDatabase()
) вместо window.openDatabase()
. Если вы заметите какие-либо другие существенные изменения, пожалуйста, сообщите об этом, так как это, вероятно, является ошибкой.Существует два способа открытия базы данных:
var db = window.sqlitePlugin.openDatabase({name: "my.db", location: 1});
var db = window.sqlitePlugin.openDatabase("myDatabase.db", "1.0", "Demo", -1);
Новый параметр location
используется для выбора расположения подкаталога базы данных (только для iOS) с помощью следующих вариантов:
0
(по умолчанию): Documents
- будет виден через iTunes и будет резервирован копия в iCloud1
: Library
- резервируется копия в iCloud, не виден через iTunes2
: Library/LocalDatabase
- не виден через iTunes и не резервируется копия в iCloudВАЖНО: Пожалуйста, подождите за событием "deviceready", как показано ниже примером:
// Ждать загрузки Cordova
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova готов
function onDeviceReady() {
var db = window.sqlitePlugin.openDatabase({name: "my.db"});
// ...
}
ЗАМЕЧАНИЕ: Имя файла базы данных должно включать расширение, если требуется.
Существует обязательный обходной путь, который просто закрывает и заново открывает файл базы данных в конце каждого завершённого транзакта. Обходной путь активируется путём открытия базы данных следующим образом:
var db = window.sqlitePlugin.openDatabase({name: "my.db", androidLockWorkaround: 1});
ЗАМЕЧАНИЕ: Этот обходной путь применяется только при использовании db.transaction()
или db.readTransaction()
, не применяется при выполнении executeSql()
на объекте базы данных.
Для Android и iOS (только): поместите файл базы данных в директорию www
и откройте его следующим образом:
var db = window.sqlitePlugin.openDatabase({name: "my.db", createFromLocation: 1});
или чтобы отключить резервное копирование iCloud:
db = sqlitePlugin.openDatabase({name: "my.db", location: 2, createFromLocation: 1});
ВАЖНЫЕ УКАЗАНИЯ:- Поместите предварительно заполненный файл базы данных в поддиректорию www
. Это должно работать корректно при использовании Cordova CLI для поддержки как Android, так и iOS версий.
openDatabase
. Полное автоматическое расширение было полностью удалено.Модель многопоточности зависит от используемой версии:
Это довольно сильный тест: сначала создаем таблицу и добавляем одну запись, затем выполняем запрос на количество записей, чтобы проверить, была ли запись успешно добавлена. Обратите внимание, что новый транзакционный процесс создаётся в середине первого обратного вызова.
// Ждём загрузки Cordova
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova готов
function onDeviceReady() {
var db = window.sqlitePlugin.openDatabase({name: "my.db"});
db.transaction(function(tx) {
tx.executeSql('DROP TABLE IF EXISTS test_table');
tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)');
// Демонстрация PRAGMA:
db.executeSql("pragma table_info(test_table)", [], function(res) {
console.log("PRAGMA res: " + JSON.stringify(res));
});
tx.executeSql("INSERT INTO test_table(data, data_num) VALUES (?, ?)", ["test", 100], function(tx, res) {
console.log("insertId: " + res.insertId + " -- вероятно 1");
console.log("rowsAffected: " + res.rowsAffected + " -- должно быть 1");
});
});
}
executeSql()
повторно используется для выполнения executeSql()
еще раз.// Ждём загрузки Cordova
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova готов
function onDeviceReady() {
var db = window.sqlitePlugin.openDatabase("Database", "1.0", "Demo", -1);
db.transaction(function(tx) {
tx.executeSql('DROP TABLE IF EXISTS test_table');
tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)');
tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function(tx, res) {
console.log("insertId: " + res.insertId + " -- вероятно 1");
console.log("rowsAffected: " + res.rowsAffected + " -- должно быть 1");
tx.executeSql("SELECT COUNT(id) AS cnt FROM test_table;", [], function(tx, res) {
console.log("res.rows.length: " + res.rows.length + " -- должно быть 1");
console.log("res.rows.item(0).cnt: " + res.rows.item(0).cnt + " -- должно быть 1");
});
}, function(e) {
console.log("ОШИБКА: " + e.message);
});
});
}
Этот случай также будет работать с Safari (WebKit), предположив, что вы замените window.sqlitePlugin.openDatabase
на window.openDatabase
.
window.sqlitePlugin.deleteDatabase({name: "my.db", location: 1}, successcb, errorcb);
location
, как указано выше для openDatabase
(только для iOS)
Примечание: пока не реализовано для Windows (8.1).
**ПРЕДУПРЕЖДЕНИЕ:** Этот вариант находится всё ещё в экспериментальном состоянии. Пожалуйста, внимательно прочитайте и следуйте этим пунктам.
- Убедитесь, что ваша среда разработки Cordova обновлена: npm update -g cordova cordova-windows
Для создания нового проекта: cordova create MyProjectFolder com.my.project MyProject
(и затем выполните команду cd
для перехода в директорию вашего проекта)
Чтобы добавить плагин: cordova plugin add https://github.com/brodysoft/Cordova-SQLitePlugin
Чтобы добавить целевую платформу Windows (если она еще не существует): cordova platform add windows
Если вы используете Visual Studio Express (2013), возможно, вам придется удалить сборку Windows 8.0 из решения Visual Studio.
Если вы используете Cordova CLI для полностью автоматической установки (как это описано здесь), вы не сможете запустить проект для "Any CPU". Пожалуйста, укажите тип процессора (например, x86 или x64). Чтобы использовать все доступные CPU: создайте клон этого проекта и в вашем клоне удалите (или закомментируйте) элемент, который включает проект SQLite3-Windows8.1.vcxproj
:```xml
--- a/plugin.xml
+++ b/plugin.xml
@@ -79,8 +79,6 @@
<!-- Спасибо за предоставленный проект от AllJoyn-Cordova / cordova-plugin-alljoyn: -->
<framework src="src/windows/SQLite3-WinRT/SQLite3/SQLite3-Windows8.1.vcxproj" custom="true" type="projectReference" target="windows" />
Затем:
- Установите плагин из расположения вашего клона (может находиться в вашей файловой системе);
- Добавьте целевую платформу Cordova `windows`;
- Откройте решение для целевой платформы Windows, и добавьте проект `SQLite3-Windows8.1.vcxproj` (расположенный в `path.to.plugin/src/windows/SQLite3-WinRT/SQLite3`) в ваше решение приложения.
## Легкий способ установки с помощью инструмента plugman
```shell
plugman install --platform MYPLATFORM --project path.to.my.project.folder --plugin https://github.com/brodysoft/Cordova-SQLitePlugin
где MYPLATFORM может быть android
, ios
, или wp8
.
Публикация, как начать разработку на хосте Windows без использования инструмента Cordova CLI (только для целевой платформы Android), доступна здесь.
ОБСЛУЖИВАНИЕ: Автоматическая установка для целевой платформы Windows не поддерживается инструментом plugman
.
npm install -g cordova # если у вас нет cordova
cordova create MyProjectFolder com.my.project MyProject && cd MyProjectFolder # если вы только начинаете
cordova plugin add https://github.com/brodysoft/Cordova-SQLitePlugin
**ВНИМАНИЕ:** Для целевой платформы Windows прочтите раздел выше.
**ВАЖНО:** Иногда вам потребуется обновить версию для платформы перед сборкой, например: `cordova prepare ios`
**ОБСЛУЖИВАНИЕ:** Если вы не можете собрать для платформы после `cordova prepare`, возможно, вам придется удалить платформу и снова её добавить, например:
cordova platform rm ios cordova platform add ios
## Исходное дерево
- `SQLitePlugin.coffee.md`: независимый от платформы (литературный кофейный скрипт, который может быть прочтен современным компилятором CoffeeScript)
- `www`: `SQLitePlugin.js` теперь независим от платформы
- `src`: Java-код плагина для Android; Objective-C-код плагина для iOS; C#-код и DLL для WP(8)
- `simple-test-windows`: простой набор тестов для версии Windows с использованием Jasmine (1.3.1)
- `test-www`: простое тестирование в `index.html` с использованием qunit 1.5.0 (не работает на целевой платформе Windows)
- `Lawnchair-adapter`: адаптер Lawnchair, основанный на версии из репозитория Lawnchair, с базовым набором тестов Lawnchair в подпапке `test-www`
## Ручная установка — версия для Android
Эти инструкции по установке основаны на примере проекта для Android из Cordova/PhoneGap 2.7.0. Для первой установки распакуйте архив PhoneGap 2.7 и используйте подпапку `lib/android/example`. - Установите `www/SQLitePlugin.js` из этого репозитория в подпапку `assets/www`
- Установите `src/android/org/pgsqlite/SQLitePlugin.java` из этого репозитория в подпапку `src/org/pgsqlite`
- Добавьте элемент плагина `<plugin name="SQLitePlugin" value="org.pgsqlite.SQLitePlugin"/>` в `res/xml/config.xml`Пример изменения файла `config.xml` для Cordova/PhoneGap 2.x:
```diff
--- config.xml.orig 2013-07-23 13:48:09.000000000 +0200
+++ res/xml/config.xml 2013-07-23 13:48:26.000000000 +0200
@@ -36,6 +36,7 @@
<preference name="useBrowserHistory" value="true" />
<preference name="exit-on-suspend" value="false" />
<plugins>
+ <plugin name="SQLitePlugin" value="org.pgsqlite.SQLitePlugin"/>
<plugin name="App" value="org.apache.cordova.App"/>
<plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/>
<plugin name="Device" value="org.apache.cordova.Device"/>
Перед первым сборкой проекта вам нужно обновить проект до нужной версии Android SDK командой типа:
android update project --path $(pwd) --target android-17
(предполагается использование Android SDK Yöntem 17, замените номер SDK на нужный)
ПРИМЕЧАНИЕ: использование этого плагина в Cordova до версии 3.0 требует следующего изменения в SQLitePlugin.java
:```diff
--- src/android/org/pgsqlite/SQLitePlugin.java 2013-09-10 21:36:20.000000000 +0200
+++ SQLitePlugin.java.old 2013-09-10 21:35:14.000000000 +0200
@@ -17,8 +17,8 @@
import java.util.HashMap;
-import org.apache.cordova.CordovaPlugin; -import org.apache.cordova.CallbackContext; +import org.apache.cordova.api.CordovaPlugin; +import org.apache.cordova.api.CallbackContext;
import android.database.Cursor;
## Руководство по установке вручную — версия для iOS
### Библиотека SQLite
В разделе "Project Build Phases", выберите первый выпадающий список "Link Binary with Libraries" и добавьте библиотеку `libsqlite3.dylib` или `libsqlite3.0.dylib`.
**ЗАМЕЧАНИЕ:** В разделе "Build Phases" может быть несколько выпадающих списков "Link Binary with Libraries". Пожалуйста, выберите первый, иначе это не будет работать.
### Плагин SQLite
Перетяните файлы .h и .m в папку Plugins вашего проекта (в Xcode) — я всегда просто выбираю опцию "Создать ссылки".
---
**ПРИМЕЧАНИЕ:** использование этого плагина в Cordova до версии 3.0 требует следующего изменения в `SQLitePlugin.java`.Используйте заранее скомпилированный файл JavaScript из папки build/, либо скомпилируйте файл CoffeeScript из папки src/ в JavaScript с использованием опции обёртки функцией на уровне верхнего уровня (по умолчанию).
Используйте полученный файл JavaScript в вашем HTML.
Включите плагин SQLitePlugin в файле `config.xml` (Cordova/PhoneGap 2.x):
```diff
--- config.xml.old 2013-05-17 13:18:39.000000000 +0200
+++ config.xml 2013-05-17 13:18:49.000000000 +0200
@@ -39,6 +39,7 @@
<content src="index.html" />
<plugins>
+ <plugin name="SQLitePlugin" value="SQLitePlugin" />
<plugin name="Device" value="CDVDevice" />
<plugin name="Logger" value="CDVLogger" />
<plugin name="Compass" value="CDVLocation" />
TODO
TODO
--- index.html.old 2012-08-04 14:40:07.000000000 +0200 +++ assets/www/index.html 2012-08-04 14:36:05.000000000 +0200 @@ -24,7 +24,35 @@ <title>PhoneGap</title> <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script type="text/javascript" charset="utf-bk" src="main.js"></script>
<script type="text/javascript" charset="utf-8" src="SQLitePlugin.js"></script>
<script type="text/javascript" charset="utf-8">
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
var db = window.sqlitePlugin.openDatabase("Database", "1.0", "Демонстрация", -1);
db.transaction(function(tx) {
tx.executeSql('DROP TABLE IF EXISTS test_table');
tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)');
tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function(tx, res) {
console.log("insertId: " + res.insertId + " -- возможно 1"); // проверка #18/#38
alert("insertId: " + res.insertId + " -- должно быть валидным");
db.transaction(function(tx) {
tx.executeSql("SELECT data_num FROM test_table;", [], function(tx, res) {
console.log("res.rows.length: " + res.rows.length + " -- должно быть 1");
alert("res.rows.item(0).data_num: " + res.rows.item(0).data_num + " -- должно быть 100");
});
});
}, function(e) {
console.log("Ошибка: " + e.message);
});
});
}
</script>
# Общие ловушки и проблемы- Имя плагина начинается с "SQL" в верхнем регистре, но имя объекта `sqlitePlugin` в JavaScript начинается с "sql" в нижнем регистре.
- Попытка открыть базу данных до получения обратного вызова события "deviceready".
# Поддержка
## Отчет о проблемах
Если у вас возникли проблемы с плагином, пожалуйста, проверьте следующее:
- Вы используете последнюю версию JavaScript плагина и платформенно-специфического Java или Objective-C из этого репозитория.
- Вы правильно установили JavaScript и платформенно-специфический Java или Objective-C.
- Вы указали правильную версию JavaScript Cordova и SQLitePlugin.js и правильно указали пути.
- Вы правильно зарегистрировали плагин в `config.xml`.
Если вы всё ещё не можете решить проблему:
- Создайте самый простой тестовый проект, чтобы продемонстрировать проблему, включая следующие характеристики:
- он полностью самодостаточен, то есть использует только библиотеки Cordova и SQLitePlugin.js;
- если проблема связана с добавлением данных в таблицу, что тестовый проект включает в себя запросы, использованные для открытия базы данных и создания таблицы;
- если проблема связана с извлечением данных из таблицы, что тестовый проект включает в себя запросы, использованные для открытия базы данных, создания таблицы и внесения данных, которые вы пытаетесь получить.Затем вы можете [создать новый отчет о проблеме](https://github.com/brodysoft/Cordova-SQLitePlugin/issues/new).
## Контактное сообщество
Если у вас есть вопросы по поводу плагина, пожалуйста, опубликуйте их на [форуме Cordova-SQLitePlugin](http://groups.google.com/group/Cordova-SQLitePlugin).
**Примечание:** Пожалуйста, отправляйте все ошибки на [brodysoft / Cordova-SQLitePlugin / issues](https://github.com/brodysoft/Cordova-SQLitePlugin/issues), чтобы они могли быть правильно отслежены.
# Единичные тесты
Единичные тесты выполняются в `test-www/`.
## Запуск тестов из командной строки
Чтобы запустить тесты из командной строки \*nix, просто выполните одно из следующих действий:
```bash
./bin/test.sh ios
или для Android:
./bin/test.sh android
Чтобы запустить тесты из командной строки Windows PowerShell, выполните одно из следующих действий:
.\bin\test.ps1 android
или для Windows Phone 8:
.\bin\test.ps1 wp8
Пожалуйста, просмотрите дерево Lawnchair-adapter
, которое содержит общий адаптер, который также должен работать с версией Android, а также директорию test-www
.
Включите следующие JavaScript-файлы в ваш HTML:
cordova.js
(не забудьте!)lawnchair.js
(вы предоставляете)SQLitePlugin.js
(в случае Cordova до версии 3.0)Lawnchair-sqlitePlugin.js
(обязательно следует за SQLitePlugin.js
в случае Cordova до версии 3.0)Параметр name
определяет имя файла базы данных SQLite, без автоматически добавляемого расширения. По желанию вы можете изменить его с помощью параметра db
.В этом примере вы будете использовать/создавать базу данных с именем файла kvstore
:
kvstore = new Lawnchair({name: "kvstore"}, function() {
// выполняйте действия
});
С использованием параметра db
можно указать имя файла с требуемым расширением и создать несколько хранилищ в одном файле базы данных. (Будут созданы одна таблица на каждое хранилище.)
recipes = new Lawnchair({db: "cookbook", name: "recipes", ...}, myCallback());
ingredients = new Lawnchair({db: "cookbook", name: "ingredients", ...}, myCallback());
ИЗВЕСТНАЯ ПРОБЛЕМА: новые параметры базы данных не поддерживаются адаптером Lawnchair. Обходной путь — открыть файл базы данных с помощью sqlitePlugin.openDatabase()
.
Адаптер теперь является частью PouchDB благодаря @nolanlawson, см. PouchDB FAQ.
master
ветки. Общепринятое правило — изменения будут переформированы с помощью git rebase
или git cherry-pick
, а не объединены.Отзывы от приложений, использующих этот плагин, будут особенно полезны.
Донесение проблем в разделе brodysoft / Cordova-SQLitePlugin / issues поможет улучшить качество этого плагина.
Корректировки с исправлением ошибок полезны, особенно если они сопровождаются тестовым кодом.
Любые улучшения приветствуются, когда они сопровождаются тестовым кодом и работают для всех поддерживаемых платформ. Увеличение сложности следует избегать.
Все вклады могут быть переиспользованы @brodybits (Крис Броди) под другим лицензионным соглашением в будущем. Будут предприняты усилия, чтобы присвоить заслугу за значительные вклады, но это не гарантируется.
Перестроение проекта, то есть перемещение файлов и/или директорий, следует избегать, если возможно. Если вы видите необходимость в перестроении, лучше всего спросить сначала на форуме Cordova-SQLitePlugin forum, где альтернативы можно обсудить до принятия решения. Если вы хотите предложить изменения в структуре проекта:
Создайте специальную ветку внутри вашего форка, откуда вы можете отправить предлагаемое переустройство; - Всегда используйте git mv
, чтобы переместить файлы и директории;
common-src
- исходный код для версий Android и iOSnew-src
- исходный код для версий Android, iOS и Windows (8.1)new-rc
- предварительная версия для Windows (8.1), включает исходный код библиотеки SQLite-WinRT C++master-src
- исходный код для версий Android, iOS и WP(8)master-rc
- предварительная версия, включает исходный код классов библиотеки CSharp-SQLitemaster
- версия для выпуска, будет включена в сборку PhoneGap.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )