分享SQLite語句的基礎知識,是很基礎的部分,只涉及"增","刪","改","查"4個語法.不涉及錶鏈接等內容.以後我會更新錶鏈接的隨筆. github上有一個SQL的Demo,包含增刪改查. UI如圖: url: --- >https://github.com/huyp/SQLite3_D...
分享SQLite語句的基礎知識,是很基礎的部分,只涉及"增","刪","改","查"4個語法.不涉及錶鏈接等內容.以後我會更新錶鏈接的隨筆.
github上有一個SQL的Demo,包含增刪改查. UI如圖: url: --- > https://github.com/huyp/SQLite3_Demo.git
使用SQLite,首先要手動導入libsqlite3.tbd庫. 點擊工程 ---- Build Phases ---- Link Binary With Libraries 點擊 + 號,輸入libsqlite3. 你會發現兩個庫libsqlite3.tbd 和 libsqlite3.0.tbd ,導入其中任意一個即可. 這兩個庫有什麼區別呢? 你可以把 libsqlite3.0.tbd 看做是一個快捷方式, libsqlite3.tbd 是真正的庫.
使用SQLite之前,你需要先瞭解一些SQL語句.這裡就寫一些簡單的語句,詳細的語法還要認真學習才能掌握.
SQLite使用的是C語言.iOS開發要轉成char類型
使用前,導入sqlite3頭文件,定義一個資料庫
1 #import <sqlite3.h> 2 3 @interface ViewController () 4 5 @property (assign,nonatomic)sqlite3 * database; 6 7 @end 8 9 @implementation ViewController 10 11 @synthesize database;
創建一個學生表格,表格中有ID,name,age三個屬性,ID是主鍵.
創建表格 : create table if not exists t_student (id integer primary key autoincrement, name text, age integer)"
create table : 創建一個表格. if not exists : 如果沒有被創建過. t_student : 表格名字. id integer : ID integer類型(整數). primary key : 主鍵. autoincreament : 自動+1. name text : name 類型(字元串) age integer類型(整數).
1 //把文本框轉換成C語言 2 const char * name = [_text1.text UTF8String];//名字 3 const char * age = [_text2.text UTF8String];//年齡 4 //增加一行語句 5 char * sql = "insert into t_student (name, age) values (?,?)"; 6 /** 7 sqlite 操作二進位數據需要用一個輔助的數據類型:sqlite3_stmt * 。 8 這個數據類型 記錄了一個“sql語句”。為什麼我把 “sql語句” 用雙引號引起來?因為你可以把 sqlite3_stmt * 所表示的內容看成是 sql語句,但是實際上它不是我們所熟知的sql語句。它是一個已經把sql語句解析了的、用sqlite自己標記記錄的內部數據結構。 9 */ 10 sqlite3_stmt * stmt; 11 12 //這裡要執行sqlite語句了 (資料庫,SQL語句,-1,&stmt,NULL); 增刪改查都是用這一句代碼 13 //不同的地方就是sql語句的不同,sqlite3_bind_text()中的值不同而已. 14 int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL); 15 if (result == SQLITE_OK) { 16 sqlite3_bind_text(stmt, 1, name, -1, NULL); 17 sqlite3_bind_text(stmt, 2, age, -1, NULL); 18 } 19 else { 20 NSLog(@"準備失敗"); 21 } 22 //檢驗是否操作完成 23 if (sqlite3_step(stmt) == SQLITE_DONE) { 24 NSLog(@"操作完成"); 25 } 26 else { 27 NSLog(@"操作失敗"); 28 } 29 //每次調用sqlite3_prepare 函數sqlite 會重新開闢sqlite3_stmt空間, 30 //所以在使用同一個sqlite3_stmt 指針再次調用sqlite3_prepare 前 31 //需要調用sqlite3_finalize先釋放空間 32 sqlite3_finalize(stmt);
向資料庫中插入對象: insert into t_student (name, age) values (?,?)
insert into t_student : 向表t_student中插入數據. (name, age) : 數據名. values (?,?) : 值(值1,值2).
1 //把文本框轉換成C語言 2 const char * name = "張三";//名字 3 const char * age = "20";//年齡 4 //增加一行語句 5 char * sql = "insert into t_student (name, age) values (?,?)"; 6 sqlite3_stmt * stmt; 7 int result = sqlite3_prepare_v2(database, sql, -1, &stmt, NULL); 8 if (result == SQLITE_OK) { 9 sqlite3_bind_text(stmt, 1, name, -1, NULL); 10 sqlite3_bind_text(stmt, 2, age, -1, NULL); 11 } 12 else { 13 NSLog(@"準備失敗"); 14 } 15 //檢驗是否操作完成 16 if (sqlite3_step(stmt) == SQLITE_DONE) { 17 NSLog(@"操作完成"); 18 } 19 else { 20 NSLog(@"操作失敗"); 21 } 22 //每次調用sqlite3_prepare 函數sqlite 會重新開闢sqlite3_stmt空間, 23 //所以在使用同一個sqlite3_stmt 指針再次調用sqlite3_prepare 前 24 //需要調用sqlite3_finalize先釋放空間 25 sqlite3_finalize(stmt);
刪除資料庫中的對象 : delete from t_student where id = ?
delete from t_sudent : 刪除t_student表格中的 刪除id = ? 的數據 .
1 int a = [_text1.text intValue]; 2 sqlite3_stmt * stmt; 3 char * sql = "delete from t_student where id = ?"; 4 int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL); 5 if (result == SQLITE_OK) { 6 result = sqlite3_bind_int(stmt, 1, a); 7 if (result == SQLITE_OK) { 8 result = sqlite3_step(stmt); 9 if (result == SQLITE_DONE) { 10 NSLog(@"刪除成功"); 11 } 12 else { 13 NSLog(@"刪除失敗"); 14 } 15 } 16 } 17 else { 18 NSLog(@"刪除失敗"); 19 } 20 21 sqlite3_finalize(stmt);
更改數據 : update t_student set name = ? where id = ?
update t_student : 更新表格. set name = : 設置名字為. id = 多少的數據.
就是修改id = ? 的名字.
1 const char * ID = [_text1.text UTF8String]; 2 const char * newname = [_text2.text UTF8String]; 3 sqlite3_stmt * stmt; 4 char * sql = "update t_student set name = ? where id = ?"; 5 int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL); 6 if (result == SQLITE_OK) { 7 result = sqlite3_bind_text(stmt, 1, newname, -1, NULL); 8 result = sqlite3_bind_text(stmt, 2, ID, -1, NULL); 9 if (result != SQLITE_OK) { 10 NSLog(@"更新數據有問題"); 11 } 12 if (sqlite3_step(stmt) != SQLITE_DONE) { 13 NSLog(@"更新數據不成功"); 14 } 15 } 16 else { 17 NSLog(@"修改數據失敗"); 18 } 19 sqlite3_finalize(stmt);
查詢資料庫中的所有數據 select id , name , age from t_student
select : 查詢. id,name,age : ID,名字,年齡 這三個屬性. from t_student : 從t_student這個表格中
1 char * sql = "select id , name , age from t_student"; 2 sqlite3_stmt * stmt; 3 int result = sqlite3_prepare_v2(database, sql , -1, &stmt, NULL); 4 if (result == SQLITE_OK) { 5 //sqlite3_step(stmt) == SQLITE_ROW 查詢時使用 6 while (sqlite3_step(stmt) == SQLITE_ROW) { 7 int ID = sqlite3_column_int(stmt, 0); 8 char * name = (char *)sqlite3_column_text(stmt, 1); 9 NSString * strName = [NSString stringWithUTF8String:name]; 10 int age = sqlite3_column_int(stmt, 2); 11 NSLog(@"%d,%@,%d",ID,strName,age); 12 } 13 } 14 sqlite3_finalize(stmt);