開發中會常常遇到一些數據須要存儲,若是僅僅存儲用戶名或者簡單的用戶信息,那存儲的方式有多種,簡單的歸檔解檔便可解決.但遇到大量數據須要存儲時,好比用戶瀏覽過的新聞或者微博信息,在下次用戶打開app時,但願在未聯網的狀態下,也能看見上次瀏覽過的內容,這時候用歸檔顯然就不合適了.作過PC端開發的朋友都知道,數據存儲有對應的數據庫,那iOS開發中是否也有"數據庫"呢?sql
咱們知道,移動端的開發很是注重性能,不可能使用MySql,SqlServer,DB2等大型數據庫存儲數據,而sqlite是一種輕量型數據庫,剛好解決了這個問題,贅述這麼多,終於要進入正題:Xcode中如何使用sqlite:數據庫
直接上代碼:app
首先導入一個動態庫:libsqlite3.dylibdom
導入頭文件:性能
#import <sqlite3.h>
建立數據庫:spa
- (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(@"查詢語句非合法"); } }