更多的SQLite问题。所以我的界面如下(这是所有在.M):SQL错误:不是错误
@interface Search()
@property (strong, nonatomic) NSString *databasePath; //path to sqlite database file
@property (strong, nonatomic) NSString *databaseName;
@property (nonatomic) sqlite3 *database;
@end
和初始化如下:
- (id)init
{
if ((self = [super init]))
{
self.databaseName = DB_NAME;
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
_databasePath = [documentsDir stringByAppendingPathComponent:self.databaseName];
[self checkAndCreateDatabase];
if (sqlite3_open_v2([self.databasePath UTF8String], &_database, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK)
{
[[[UIAlertView alloc]initWithTitle:@"Missing"
message:@"Database file not found"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil]show];
}
else
{
NSLog(@"%s: sqlite3_open_v2 error: %s", __FUNCTION__, sqlite3_errmsg(self.database));
}
}
的错误日志在init收益为:sqlite3_open_v2 error: not an error
。在我的搜索中,我听说SQLite在指向不存在的数据库时不会返回错误。但我不知道为什么数据库不存在。我使用复制功能(我被给予,并似乎在上班)如下:
-(void) checkAndCreateDatabase
{
// Check if the SQL database has already been saved to the users phone, if not then copy it over
BOOL dbExists;
// Create a FileManager object, we will use this to check the status
// of the database and to copy it over if required
NSFileManager *fileManager = [NSFileManager defaultManager];
// Check if the database has already been created in the users filesystem
dbExists = [fileManager fileExistsAtPath:_databasePath];
// If the database already exists then return without doing anything
if(dbExists)
{
return;
}
// If not then proceed to copy the database from the application to the users filesystem
// Get the path to the database in the application package
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:_databaseName];
// Copy the database from the package to the users filesystem
//[fileManager copyItemAtPath:databasePathFromApp toPath:_databasePath error:nil];
NSError *error = nil;
if (![fileManager copyItemAtPath:databasePathFromApp toPath:_databasePath error:&error])
{
NSLog(@"%s: copyItemAtPathError: %@", __FUNCTION__, error);
}
}
最后,我在数据库中存在的iOS模拟器Documents目录已经验证,以及查询我试图执行它的作品。为什么我会得到这个错误?
只是一个想法,如果你正在使用大量的SQLite交互,然后去[FMDB框架](https://github.com/ccgus/fmdb)。它非常轻巧,简单而干净。 – icodebuster
在我阅读更多内容之前,它是否允许SQL查询?我正在从Android移植项目,并且查询已写入。 – muttley91
100%它将工作..和它的只是Objective-C SQLite包装。所以没有问题。 – icodebuster