標籤:
開發中會經常遇到一些資料需要儲存,如果僅僅儲存使用者名稱或者簡單的使用者資訊,那儲存的方式有多種,簡單的歸檔解檔即可解決.但遇到大量資料需要儲存時,比如使用者瀏覽過的新聞或者微博資訊,在下次使用者開啟app時,希望在未連網的狀態下,也能看見上次瀏覽過的內容,這時候用歸檔顯然就不合適了.做過PC端開發的朋友都知道,資料存放區有對應的資料庫,那iOS開發中是否也有"資料庫"呢?
我們知道,移動端的開發非常注重效能,不可能使用MySql,SqlServer,DB2等大型資料庫儲存資料,而sqlite是一種輕量型資料庫,恰好解決了這個問題,贅述這麼多,終於要進入正題:X-Code中如何使用sqlite:
直接上代碼:
首先匯入一個動態庫:libsqlite3.dylib
匯入標頭檔:
#import <sqlite3.h>
建立資料庫:
- (void)viewDidLoad{ [super viewDidLoad]; // 1.獲得沙箱中的資料庫檔案名 NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; // 2.建立(開啟)資料庫(如果資料庫檔案不存在,會自動建立) int result = sqlite3_open(filename.UTF8String, &_db); if (result == SQLITE_OK) { NSLog(@"成功開啟資料庫"); // 3.創表 const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);"; char *errorMesg = NULL; int result = sqlite3_exec(_db, sql, NULL, NULL, &errorMesg); if (result == SQLITE_OK) { NSLog(@"成功建立t_student表"); } else { NSLog(@"建立t_student表失敗:%s", errorMesg); } } else { NSLog(@"開啟資料庫失敗"); }}
- (IBAction)insert{ for (int i = 0; i < 30; i++) { NSString *name = [NSString stringWithFormat:@"Jack-%d", arc4random()%100]; int age = arc4random()%100; NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age) values(‘%@‘, %d);", name, age]; char *errorMesg = NULL; int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg); if (result == SQLITE_OK) { NSLog(@"成功添加資料"); } else { NSLog(@"添加資料失敗:%s", errorMesg); } }}
- (IBAction)query{ // 1.定義sql語句 const char *sql = "select id, name, age from t_student where name = ?;"; // 2.定義一個stmt存放結果集 sqlite3_stmt *stmt = NULL; // 3.檢測SQL語句的合法性 int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL); if (result == SQLITE_OK) { NSLog(@"查詢語句是合法的"); // 設定預留位置的內容 sqlite3_bind_text(stmt, 1, "jack", -1, NULL); // 4.執行SQL語句,從結果集中取出資料// int stepResult = sqlite3_step(stmt); while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查詢到一行資料,此處類似Ado.net中的reader.read() // 獲得這行對應的資料 // 獲得第0列的id int sid = sqlite3_column_int(stmt, 0); // 獲得第1列的name const unsigned char *sname = sqlite3_column_text(stmt, 1); // 獲得第2列的age int sage = sqlite3_column_int(stmt, 2); NSLog(@"%d %s %d", sid, sname, sage); } } else { NSLog(@"查詢語句非合法"); }}
X-Code中用sqlite儲存資料