1,導入支持sqlite3的本地frame: libsqlite3.tbd (Xcode 7及更高版本後綴爲 .tbd ,Xcode 6 及以前版本後綴爲 .dylib)sql
2,導入頭文件並設置所需屬性:數據庫
#import "ViewController.h" #import "Person.h" #import "sqlite3.h" @interface ViewController () @property (nonatomic,assign) sqlite3 *sqlite3; @property (nonatomic,strong) NSArray *dataList;
3,建立數據庫,若是要打開某個數據庫文件也用此方法,有此文件名會打開,沒有默認建立:dom
#pragma mark_Sqlite3Open - (void)openDatabase { //1.設置文件名 NSString *filename = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"person.db"]; //2.打開數據庫文件,若是沒有會自動建立一個文件 NSInteger result = sqlite3_open(filename.UTF8String, &_sqlite3); if (result == SQLITE_OK) { NSLog(@"打開數據庫成功!"); //3.建立一個數據庫表 char *errmsg = NULL; sqlite3_exec(_sqlite3, "CREATE TABLE IF NOT EXISTS t_person(id integer primary key autoincrement, name text, age integer)", NULL, NULL, &errmsg); if (errmsg) { NSLog(@"錯誤:%s", errmsg); } else { NSLog(@"創表成功!"); } } else { NSLog(@"打開數據庫失敗!"); } }
4,往數據庫中錄入數據:atom
#pragma mark_Sqlite3Insert - (void)insertData { NSString *nameStr; NSInteger age; for (NSInteger i = 0; i < 1000; i++) { nameStr = [NSString stringWithFormat:@"Bourne-%d", arc4random_uniform(1000)]; age = arc4random_uniform(80) + 20; NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_person (name, age) VALUES('%@', '%ld')", nameStr, age]; char *errmsg = NULL; sqlite3_exec(_sqlite3, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"錯誤:%s", errmsg); } } NSLog(@"插入完畢!"); }
5,讀取數據庫:code
5.1,建立一個Person類:orm
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Person : NSObject<NSCoding> //@property (nonatomic,strong) UIImage *img; @property (nonatomic,copy) NSString *name; @property (nonatomic,assign) NSInteger age; +(in)personWithName:(NSString *)name Age:(NSInteger)age; @end
5.2,實現Person中的方法:sqlite
#import "Person.h" @implementateion Person +(instancetype)personWithName:(NSString *)name Age:(NSInteger)age{ Person *person = [[Person alloc]init]; person.name = name; person.age = age; return person; } @end
5.3,讀取數據庫中的數據:對象
#pragma mark_Sqlite3Read - (void)readData { //讀取數據庫中數據以前,須要先打開數據庫 NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:1000]; char *sql = "select name, age from t_person;"; sqlite3_stmt *stmt; NSInteger result = sqlite3_prepare_v2(_sqlite3, sql, -1, &stmt, NULL); if (result == SQLITE_OK) { NSLog(@"STMT:%d",sqlite3_step(stmt)); while (sqlite3_step(stmt) == SQLITE_ROW) { char *name = (char *)sqlite3_column_text(stmt, 0); NSInteger age = sqlite3_column_int(stmt, 1); //建立對象 Person *person = [Person personWithName:[NSString stringWithUTF8String:name] Age:age]; // NSLog(@"Name:%@ Age:%ld PName:%@ Page:%ld",[NSString stringWithUTF8String:name],age,person.name,person.age); [mArray addObject:person]; } self.dataList = mArray; } sqlite3_finalize(stmt); NSLog(@"DataList:%@",self.dataList); }
注:讀數據庫時必定要先打開數據庫ci