簡體   English   中英

在iOS應用中更新sqlite

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM