iOS-从JavaScript和FMDB访问单个sqlite数据库
我们遇到了一个问题,这个问题似乎只出现在iOS设备上,但在模拟器上似乎可以正常工作。问题是iOS-从JavaScript和FMDB访问单个sqlite数据库,javascript,ios,sqlite,cordova-2.0.0,Javascript,Ios,Sqlite,Cordova 2.0.0,我们遇到了一个问题,这个问题似乎只出现在iOS设备上,但在模拟器上似乎可以正常工作。问题是 我们的iOS应用程序是混合的(Cordova),有些视图完全是本地视图,有些视图完全是web视图 我们希望从两个代码库中使用相同的sqlite db 在web中,我们使用WebSQL api(不是cordova插件),从本机iOS端,我们使用FMDB 数据库最初由javascript创建,并放置在应用程序的库目录中 4.x目录/Library/WebKit/Databases/file\u 0/000
- 我们的iOS应用程序是混合的(Cordova),有些视图完全是本地视图,有些视图完全是web视图李>
- 我们希望从两个代码库中使用相同的sqlite db李>
- 在web中,我们使用WebSQL api(不是cordova插件),从本机iOS端,我们使用FMDB
- 数据库最初由javascript创建,并放置在应用程序的库目录中
- 4.x目录
/Library/WebKit/Databases/file\u 0/000000000000000 1.db
- 5.x目录/code>/Library/Caches/file\u 0/000000000000000 1.db
- 4.x目录
- 每当FMDB访问sqlite数据库时,JS代码就不能再对其创建的数据库运行事务
“无法打开到数据库的事务”我们可以通过将sqlite数据库上的迁移一直回滚到第一次迁移之前,从而获得所需的结果,有效地为我们提供了一个干净的数据库。我们也没有删除由web视图创建的任何缓存文件。这不是世界上最好的解决方案,但它似乎适用于我们的用例。如果还有其他答案,我很想多听听。您是否尝试过使用文档目录而不是库目录?您是否在尝试从JS端连接之前关闭与FMDB的连接?
NSArray *libraryPaths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask,
YES);
NSString *libraryDir = [libraryPaths objectAtIndex:0];
NSString *databasePath = [libraryDir
stringByAppendingPathComponent:@"WebKit/Databases/file__0/"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:databasePath]) {
databasePath = [libraryDir
stringByAppendingPathComponent:@"Caches/file__0/"];
}
NSString *databaseFile = [databasePath
stringByAppendingPathComponent:@"0000000000000001.db"];
if (!static_fmdb) {
static_fmdb = [FMDatabase databaseWithPath:databaseFile];
NSAssert(static_fmdb, @"Unable to open create FMDatabase");
}
if (![static_fmdb open]) {
NSLog(@"Error in %@: Failed to connect to database!\n",
NSStringFromSelector(_cmd));
}