IOS SQLite文法基礎,iossqlite文法
分享SQLite語句的基礎知識,是很基礎的部分,只涉及"增","刪","改","查"4個文法.不涉及錶鏈接等內容.以後我會更新錶鏈接的隨筆.
github上有一個SQL的Demo,包含增刪改查. UI: url: --- > https://github.com/huyp/SQLite3_Demo.git
1 #import <sqlite3.h> 2 3 @interface ViewController () 4 5 @property (assign,nonatomic)sqlite3 * database; 6 7 @end 8 9 @implementation ViewController10 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);