標籤:
首先,使用sqlite儲存資料,需要添加libsqlite3.dylib 這個動態庫,然後 添加動態庫的主標頭檔 #import <sqlite3.h>
// db就是資料庫的象徵,如果要進行CRUD(增刪改查),得操作db這個執行個體
@property (nonatomic, assign) sqlite3 *db;
第一步: 開啟資料庫。 當系統第一次用到資料庫時, 我們先建立一個資料庫檔案,並建立表,就在這一步。
// 獲得資料庫檔案的路徑,即沙箱
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filename = [doc stringByAppendingPathComponent:@"students.sqlite"];
// 將OC字串 轉成 C語言字串
const char *cfilename = filename.UTF8String;
// 1.開啟資料庫(如果資料庫檔案不存在,sqlite3_open函數會自動建立資料庫檔案)
int result = sqlite3_open(cfilename, &_db); // 這個open方法 就是開啟資料庫,傳一個c語言的字串和 db
if (result == SQLITE_OK) { // 開啟成功
NSLog(@"成功開啟資料庫");
// 2.創表
const char *sql = "CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);";
char *erroMsg = NULL;
result = sqlite3_exec(self.db, sql, NULL, NULL, &erroMsg);
if (result == SQLITE_OK) {
NSLog(@"成功創表");
} else {
NSLog(@"創表失敗--%s--%@-%d", erroMsg, [NSString stringWithUTF8String:__FILE__], __LINE__); //這個可以知道 錯誤在哪個檔案的 第幾行
}
} else {
NSLog(@"開啟資料庫失敗");
}
第二部 : 插入/添加資料
下面以插入/添加 20條資料為例:
for (int i = 0; i<20; i++) {
// 1.拼接SQL語句
NSString *name = [NSString stringWithFormat:@"Jack-%d", arc4random_uniform(100)];
int age = arc4random_uniform(20) + 30;
NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name, age) VALUES (‘%@‘, %d);", name, age]; // 看清該方法INSERT INTO
// 2.執行SQL語句
char *erroMsg = NULL;
sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &erroMsg); //該sqlite方法就是 插入資料庫資料
if (erroMsg) { //如果有錯誤
NSLog(@"插入資料失敗--%s", erroMsg);
} else {
NSLog(@"成功插入資料");
}
}
刪除資料 和插入資料 一樣,只需更換一下 sql語句。
查詢資料:
const char *sql = "SELECT id, name, age FROM t_student WHERE age <= 30;"; //sql語句,查詢條件
// 進行查詢前的準備工作
// -1 代表系統會自動計算SQL語句的長度
// sqlite3_stmt:用來取資料
sqlite3_stmt *stmt = NULL;
if (sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL) == SQLITE_OK) { // SQL語句沒有問題
NSLog(@"查詢語句沒有問題");
// 每調一次sqlite3_step函數,stmt就會指向下一條記錄
while (sqlite3_step(stmt) == SQLITE_ROW) { // 找到一條記錄
// 取出資料
// 取出第0欄欄位的值(int類型的值)
int ID = sqlite3_column_int(stmt, 0);
// 取出第1欄欄位的值(tex類型的值)
const unsigned char *name = sqlite3_column_text(stmt, 1);
// 取出第2欄欄位的值(int類型的值)
int age = sqlite3_column_int(stmt, 2);
NSLog(@"%d %s %d", ID, name, age);
}
} else {
NSLog(@"查詢語句有問題");
}
ios開發中如何使用sqlite資料庫