iOS SQLite3的使用

來源:互聯網
上載者:User

標籤:

 

 

 

1.建立可修改的資料庫檔案

//應用程式套件內的內容是不可寫的,所以需要把應用程式套件內的資料庫拷貝一個副本到資源路徑去- (void)createEditableDatabase{        BOOL success;    NSFileManager *manager = [NSFileManager defaultManager];    NSError *error;    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    NSString *documentDir = [paths objectAtIndex:0];    NSString *writableDB = [documentDir stringByAppendingPathComponent:@"catalog.db"];        success = [manager fileExistsAtPath:writableDB];        if (success) {        NSLog(@"已經存在");        return;    }        NSString *defaultPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"catalog.db"];    success = [manager copyItemAtPath:defaultPath toPath:writableDB error:&error];    if (!success) {        NSAssert1(0, @"Failed to create writable database file:‘%@‘.", [error localizedDescription]);    }else NSLog(@"成功寫入");}

 

 

 

2.初始化資料庫

- (void)initDatabase{        NSString *path = [[NSBundle mainBundle] pathForResource:@"catalog" ofType:@"db"];    //NSLog(@"bundle = %@\npath = %@",[NSBundle mainBundle],path);    if (sqlite3_open([path UTF8String],&database) == SQLITE_OK) {        NSLog(@"Opening Database");    }else{        sqlite3_close(database);        NSAssert1(0, @"Failed to open database:‘%s‘.", sqlite3_errmsg(database));    }}

 

 

 

3.查詢

//execute sql statement- (NSMutableArray *)getAllProducts{        NSMutableArray *products = [NSMutableArray new];    //    const char *sql = "SELECT product.ID,product.Name,Manufacturer.name,product.details,product.price,product.quantityonhand,country.country,product.image FROM Product,Manufacturer,Country WHERE manufacturer.manufacturerID = product.manufacturerID and product.countryoforiginID = ?";    //配合sqlite3_bind_int(stmt,1,2)可使用參數化sql語句查詢        const char *sql = "SELECT product.ID,product.Name,Manufacturer.name,product.details,product.price,product.quantityonhand,country.country,product.image FROM Product,Manufacturer,Country WHERE manufacturer.manufacturerID = product.manufacturerID and product.countryoforiginID = country.countryID";        NSLog(@"\nsql = %s",sql);        sqlite3_stmt *stmt;    int sqlResult = sqlite3_prepare_v2(database,sql,-1,&stmt,NULL);    //sqlite3_bind_int(stmt,1,2);//sql語句參數查詢,語句、參數索引、參數值        if (sqlResult == SQLITE_OK) {        NSLog(@"Ready to print sth");        int time = 0;        while (sqlite3_step(stmt) == SQLITE_ROW) {                        Product *product = [Product new];            char *name = (char*)sqlite3_column_text(stmt,1);            char *manufacturer = (char*)sqlite3_column_text(stmt,2);            char *details = (char*)sqlite3_column_text(stmt, 3);            char *countryOfOrigin = (char*)sqlite3_column_text(stmt, 6);            char *image = (char*)sqlite3_column_text(stmt, 7);                        NSLog(@"%d,name = %s \n",time++,name);                        product.ID = sqlite3_column_int(stmt,0);            product.name = (name)?[NSString stringWithUTF8String:name]:@"";            product.manufacturer = (manufacturer)?[NSString stringWithUTF8String:manufacturer]:@"";            product.details = (details)?[NSString stringWithUTF8String:details]:@"";            product.price = sqlite3_column_double(stmt,4);            product.quantity = sqlite3_column_int(stmt,5);            product.countryOfOrigin = (countryOfOrigin)?[NSString stringWithUTF8String:countryOfOrigin]:@"";            product.image = (image)?[NSString stringWithUTF8String:image]:@"";                        [products addObject:product];        }                sqlite3_finalize(stmt);    }else{        NSLog(@"read failed:%d",sqlResult);    }        return products;}

 

 

 

4.關閉資料庫

- (void)closeDatabase{    if (sqlite3_close(database) != SQLITE_OK) {        NSAssert1(0, @"Error:failed to close database:‘%s‘.", sqlite3_errmsg(database));    }}

 

iOS SQLite3的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.