[英]update sqlite in iOS app
我是xcode的新手,我有更新sqlite的問題。
readBioViewController.h
@interface readBioViewController : UIViewController {
NSString *fav;
}
readBioViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
fav = @"1";
}
- (IBAction)addFavorito:(id)sender {
DataDAO *dbCrud = [[DataDAO alloc] init];
NSLog(@"addFavorito favid '%@'.", fav);
[dbCrud addFavorito:fav];
}
DataDAO.m
-(void)addFavorito:(NSString *)fav {
NSFileManager *fileMgr = [NSFileManager defaultManager];
NSString *dirPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"versos.sqlite"];
BOOL success = [fileMgr fileExistsAtPath:dirPath];
if(!success) {
NSLog(@"Cannot locate database file '%@'.", dirPath);
}
if(!(sqlite3_open([dirPath UTF8String], &db) == SQLITE_OK)) {
NSLog(@"An error has occured.");
}
NSString *sql = @"update Versos set favorito = 1 Where id = 2";
char *err;
if(sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
sqlite3_close(db);
NSLog(@"erro no update");
} else
NSLog(@"fez o update");
}
我有一個按鈕(IBOutlet - addFavorito),我想執行sql來更新ID(2)。 我在NSLog中看到結果“NSLog(@”fez o update“);” 但是當我打開versos.sqlite時,ID 2中的結果是favorito = 0而沒有favorito = 1。
您無法更新數據庫,因為它位於應用程序包中。 您應該首先將數據庫復制到Documents目錄,然后修改該文件。
使用此功能在文檔目錄中創建數據庫。
-(void)CopyDatabaseIfNeeded
{
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dbpath=[paths objectAtIndex:0];
dbpath=[dbpath stringByAppendingPathComponent:@"versos.sqlite"];
BOOL success;
NSFileManager *filemanager=[NSFileManager defaultManager];
success=[filemanager fileExistsAtPath:dbpath];
if(success) return;
NSString *dbpathfromapp=[[[NSBundle mainBundle] resourcePath ] stringByAppendingPathComponent:@"versos.sqlite"];
success=[filemanager copyItemAtPath:dbpathfromapp toPath:dbpath error:nil];
if(!success)
{
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"Error " message:@"failed to Create writable dataBase" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
然后用於更新數據庫,使用以下函數獲取數據庫的路徑/
-(NSString *) GetDatabasePath {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) ;
NSString *documentsDirectory = [paths objectAtIndex:0] ;
return [documentsDirectory stringByAppendingPathComponent:@"versos.sqlite"] ;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.