SQLite的使用:
1.添加相關庫libsqlite3.tdb
buid phases - > link binary with libraries -> 點擊"+" ->搜索libsqlite3.tdb並添加
2.基本步驟
1)創建數據庫
- (void)openDB
{
// 生成存放在沙盒中的數據庫完整路徑
NSString *docDir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *dbName = [docDir stringByAppendingPathComponent:@"my.db"];
// 如果數據庫不存在,怎新建並打開一個數據庫,否則直接打開
if (SQLITE_OK == sqlite3_open(dbName.UTF8String, &_db)) {
NSLog(@"創建/打開數據庫成功。");
} else {
NSLog(@"創建/打開數據庫失敗。");
}
}
/**
* 指定單步sql指令
*
* @param sql sql語句
* @param msg 提示信息
*/
- (void)execSql:(NSString *)sql msg:(NSString *)msg
{
char *errmsg;
// 所謂回調:sqlite3_exec執行完成sql之後調用的方法,叫做回調方法
if (SQLITE_OK == sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg)) {
NSLog(@"%@成功", msg);
} else {
NSLog(@"%@失敗 - %s", msg, errmsg);
}
}
/**
* 創建數據表
*/
- (void)createTable
{
NSString *sql = @"CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT,name text,age integer,phoneNo text)";
[self execSql:sql msg:@"創建數據表"];
}
3)數據操作(增,刪,改)
創建sql語句並單步執行(sqlite3_exec)
例:增
- (void)addPerson:(Person *)person
{
NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_person (name, age, phoneNo) VALUES ('%@', %ld, '%@')", person.name, person.age, person.phoneNo];
[self execSql:sql msg:@"添加個人記錄"];
}
- (NSArray *)queryPersonsWithSql:(NSString *)sql
{
// 1. 評估準備SQL語法是否正確
sqlite3_stmt *stmt = NULL;
// NSMutableArray *persons = [NSMutableArray array];
NSMutableArray *persons = nil;
if (SQLITE_OK == sqlite3_prepare_v2(_db, sql.UTF8String, -1, &stmt, NULL)) {
// 2. 如果能夠正常查詢,調用單步執行方法,依次取得查詢結果
// 如果得到一行記錄
persons = [NSMutableArray array];
while (SQLITE_ROW == sqlite3_step(stmt)) {
// 3. 獲取/顯示查詢結果
// sqlite3_column_xxx方法的第二個參數與sql語句中的字段順尋一一對應(從0開始)
int ID = sqlite3_column_int(stmt, 0);
const unsigned char *name = sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
const unsigned char *phoneNo = sqlite3_column_text(stmt, 3);
NSString *nameUTF8 = [NSString stringWithUTF8String:(const char *)name];
NSString *phoneNoUTF8 = [NSString stringWithUTF8String:(const char *)phoneNo];
Person *p = [Person personWithID:ID name:nameUTF8 age:age phoneNo:phoneNoUTF8];
[persons addObject:p];
}
} else {
NSLog(@"SQL語法錯誤");
}
// 4. 釋放句柄
sqlite3_finalize(stmt);
return persons;
}
5)關閉數據庫
- (void)closeDB{
sqlite3_close(_db);
}
3.sql語句
1)SQLite存儲類型:NULL,INTEGER,REAL,TEXT,BLOB
2)類型
i.數據定義語言DDL: 創建表CREATE、刪除表DROP
ii.數據操作語言DML: 增INSERT、刪DELETE、改 UPDATE
iii.數據查詢語言DQL: 查詢SELECT