更多的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