0
所以當我按下按鈕時,我想要做的是對我的sqlite數據庫運行UPDATE查詢。下面是我有和它不工作,我認爲的問題是,我打開數據庫從捆綁,這當然是只讀。現在我已經做了一些研究,並且意識到我應該:按鈕按下時更新sql查詢?
檢查Documents文件夾中是否存在數據庫。
如果不存在,請將數據庫從數據包複製到Documents文件夾。
現在,從Documents文件夾中打開數據庫。
但我不知道該怎麼做?任何幫助將不勝感激。這裏是我有什麼:
- (IBAction)update:(id)sender {
@try {
NSFileManager *fileMgr = [NSFileManager defaultManager];
NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"StayhealthyExercises-1.sqlite"];
BOOL success = [fileMgr fileExistsAtPath:dbPath];
if(!success)
{
NSLog(@"Cannot locate database file '%@'.", dbPath);
}
if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
{
NSLog(@"An error has occured: %s", sqlite3_errmsg(db));
}
const char *sql = "UPDATE strengthexercises SET isFavorite = 'true' WHERE ID = '1'";
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
{
NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db));
}else{
if (sqlite3_step(sqlStatement) == SQLITE_DONE){
NSLog(@"Success");
}
}
sqlite3_finalize(sqlStatement);
}
@catch (NSException *exception) {
NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db));
}
@finally {
sqlite3_close(db);
}
}
一個明確的答案,一個例子會有很大的幫助。提前致謝。
更新#1
現在我有這個,但它仍然沒有作用......
- (NSString *)applicationDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
return basePath;
}
- (IBAction)update:(id)sender {
@try {
NSString *docsPath = [self applicationDocumentsDirectory];
NSString *dbPath = [docsPath stringByAppendingPathComponent:@"StayhealthyExercises-1.sqlite"];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:dbPath];
if (!fileExists) {
// get the source path to copy from
NSString *dbSourcePath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"StayhealthyExercises-1.sqlite"];
// copy db to documents
[[NSFileManager defaultManager] copyItemAtPath:dbSourcePath toPath:dbPath error:nil];
}
if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
{
NSLog(@"An error has occured: %s", sqlite3_errmsg(db));
}
const char *sql = "UPDATE strengthexercises SET isFavorite = 'true' WHERE ID = '1'";
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
{
NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db));
}else{
if (sqlite3_step(sqlStatement) == SQLITE_DONE){
NSLog(@"Success");
}
}
sqlite3_finalize(sqlStatement);
}
@catch (NSException *exception) {
NSLog(@"Problem with prepare statement: %s", sqlite3_errmsg(db));
}
@finally {
sqlite3_close(db);
}
}
我已更新我的問題與我有什麼,但它仍然無法工作,任何線索? –
我縮小了問題的範圍,它甚至不能讀取它... anysuggesstions –
它說,dbSourcePath是一個未聲明的標識符,即時猜測,因爲它在if語句 –