Запрос SQLite (Spatialite) на iOS работает на 64-битном симуляторе, но ничего больше
У меня есть база данных Spatialite, созданная командой управления Django, которую я встраиваю в приложение для iOS. БД открывается отлично, но я обнаружил, что запрос к базе данных на iOS работает, только если я работаю на 64-битном устройстве. Любые другие устройства, смоделированные или иным образом, производят вывод SQLITE_NOTADB
по вызову sqlite3_prepare_v2
, с сообщением об ошибке file is encrypted or is not a database
,
Очевидно, что Mac, который создал эту базу данных, является 64-битной машиной, но базы данных SQLite должны быть независимыми от битов, поэтому я не понимаю, как это должно быть проблемой. Возможно, это не относится к базам данных Spatialite? Есть ли какие-либо флаги, которые я могу использовать с любой из функций SQLite (возможно, sqlite3_open
или же sqlite3_prepare_v2
или может быть pragma
команда), чтобы заставить его читать файл так же, как это делает 64-битная арка iOS? Или, может быть, есть способ сгенерировать db Spatialite из django в более совместимом с платформой формате? Любые предложения здесь приветствуются.
Вот фрагмент моего кода, если кто-то может найти какие-либо очевидные проблемы:
@implementation DataModel @synthesize db; - (id) init { self = [super init]; if (self! = nil) { spatialite_init (1); sqlite3 * newDbConnection; if (sqlite3_open ([[selfatialiteDbPath] UTF8String], &newDbConnection) == SQLITE_OK) { NSLog(@"База данных открыта успешно"); db = newDbConnection; } еще { NSLog (@ "Ошибка открытия базы данных"); дБ = NULL; } } вернуть себя; } - (NSArray *) getLockupsForRegion: (MKCoordinateRegion) region { NSMutableArray * lockups = [[NSMutableArray alloc] init]; NSString * query = [NSString stringWithFormat: @ "\ ВЫБЕРИТЕ имя, X(местоположение) как лат, Y(местоположение) как lon, \ крытый, тип, вместимость \ FROM lockups_lockup \ WHERE WITHIN (location, GeomFromText ('POLYGON ((% f% f,% f% f,% f% f,% f% f))')); ", regionCorners [0].latitude, regionCorners [0].longitude, regionCorners [1].latitude, regionCorners [1].longitude, regionCorners [2].latitude, regionCorners [2].longitude, regionCorners [3].latitude, regionCorners [3].longitude]; sqlite3_stmt * оператор; if(db && sqlite3_prepare_v2(дБ, [запрос UTF8String], -1, & оператор, NULL) == SQLITE_OK) { while(sqlite3_step(оператор) == SQLITE_ROW) { NSLog(@"Строка"); } } еще { NSLog (@ "Запрос не выполнен по причине: %s", sqlite3_errmsg(db)); NSLog(@"Sqlite version: %s", sqlite3_version); } возвратные блокировки; } @конец
Запуск приложения и работа на не 64-битной платформе iOS getLockupsForRegion:
производит вывод журнала:
SpatiaLite версия..: 4.1.1 Поддерживаемые расширения: - 'VirtualShape' [прямой доступ к шейп-файлу] - 'VirtualDbf' [прямой доступ к DBF] - "VirtualText" [прямой доступ CSV/TXT] - "Виртуальная сеть" [Дейкстра кратчайший путь] - 'RTree' [Пространственный индекс - R* Дерево] - 'MbrCache' [Пространственный индекс - MBR-кэш] - 'VirtualSpatialIndex' [R* Дерево мета-обработчик] - 'VirtualFDO' [совместимость FDO-OGR] - "SpatiaLite" [Пространственный SQL - OGC] Версия PROJ.4......: Отн. 4.8.0, 6 марта 2012 г. Версия GEOS........: 3.4.2-CAPI-1.8.2 r3921 2013-12-31 00:29:39.567 Приложение [8320:70b] База данных успешно открыта 2013-12-31 00:29:48.128 Приложение [8320:70b] Запрос не выполнен по причине: файл зашифрован или не является базой данных 2013-12-31 00:29:48.710 Приложение [8320:70b] Версия Sqlite: 3.8.1
И вывод журнала под arm64:
Версия SpatiaLite..: 4.1.1 Поддерживаемые расширения: - "VirtualShape" [прямой доступ к шейп-файлу] - "VirtualDbf" [прямой доступ к DBF] - "VirtualText" [прямой доступ к CSV/TXT] - "VirtualNetwork" [кратчайший путь Dijkstra] - 'RTree' [Пространственный индекс - Дерево R *] - 'MbrCache' [Пространственный индекс - Кэш MBR] - 'VirtualSpatialIndex' [Метаденный обработчик дерева R] - 'VirtualFDO' [Совместимость FDO-OGR] - 'SpatiaLite' [Пространственный SQL - OGC] Версия PROJ.4......: Отн. 4.8.0, 6 марта 2012 г. Версия GEOS........: 3.4.2-CAPI-1.8.2 r3921 2013-12-31 01:10:34.491 Приложение [8548:70b] База данных успешно открыта 2013-12-31 01:10:44.913 Приложение [8548:70b] Ряд 2013-12-31 01: 10: 44.913 Приложение [8548:70b] Ряд 2013-12-31 01:10:44.914 Приложение [8548:70b] A строка 2013-12-31 01:10:44.914 приложение [8548:70b] строка 2013-12-31 01:10:44.915 приложение [8548:70b] строка 2013-12-31 01:10:44.915 приложение [8548:70b] Строка 2013-12-31 01:10:44.916 Приложение [8548:70b] Строка 2013-12-31 01:10:44.916 Приложение [8548:70b] Ряд
Версии:
- Python: 2.7.5
- Джанго: 1.6
- PySqlite: 2.6.3
- Sqlite (на машине, генерирующей Spatialite db): 3.8.1
- Spatialite (на машине, генерирующей Spatialite db): 4.1.1
- Sqlite (на iOS): 3.8.1
- Spatialite (на iOS): 4.1.1
Любые предложения по этому вопросу будут высоко оценены!