使用SQLite 需要引入動態庫libsqlite3.tbd ,在對應的操作類文件前導入
#import<sqlite3.h>//由于是非三方框架,所以使用尖括號
在@interface中創建sqlite對象 ? " sqlite3 *sql ?"
1、創建數據倉庫,使用該方法
sqlite3_open(const char *filename, sqlite3 **ppDb)
? ? 參數1:const char *filename 存放路徑
? ? 參數2:sqlite3 **ppDb sqlite對象的雙重指針,即“&sql"
? ? 參數3:返回SQLITE_OK
2、創建數據庫表格,使用以下方法
sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg) ? //后面三個參數如不需要可填null
參數一:sqlite3 * sqlite對象
參數二:const char *sql? ? ? char*類型的sql語句。例如? "create table if not exists 表名稱 (name text primary key,age integer,lastname text)"? ,其中name 為主鍵,唯一,如果使用相同name 則會報error,判斷是否存在同名的user表格 ,如果不存在就創建,否之不創建
參數三:int (*callback)(void *, int, char **, char **) 執行exec時,每查到一條記錄,會調用這個回調函數
? ? ? ?參數1:void*? 傳遞來的數據
? ? ? ?參數2:int 一條記錄有多少個字段(即這條記錄的列數)
? ? ? ?參數3:char** 查詢出來的數據(即:每個字段的值 )。它是個一維數組(不要以為是2維數組),每個元素都是一個字符串 char * 值,是一個字段內容
? ? ? ?參數4:char** 每一個字段的字段名稱(即:列名),與 參數三 對應
參數四:void * 傳遞數據,可以是任意值。會傳遞到回調函數callback,作為它的第一個參數傳入
參數五:char **errmsg 錯誤信息
3、數據庫修改
? ? 1)更新
sql語句: update ?表名 set name = ”hello friend“ where 條件 例如:"update user set name="hello friend" where age = 12" 如果 age = 12,就修改對應的name值為hello friend
調用sqlite3_exec 方法
? ?2)刪除
sql語句 :delete from 表名 where 條件 例如:”delete from user where name="hello friend"
? ? 3)插入
sql語句:insert into 表名 values (1,"hello world",12)
4、數據查詢
調用該方法,實現查詢,返回職位SQLITE_OK,查詢到的值將會 存入sqlite3_stmt **ppStmt 參數中。
sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)
//sqlite3 *db sqlite對象(句柄)
//const char *zSql? sql語句 select 列名(*代表全部)from 表名 例如"select * from user"
//int nByte? sql語句的最大字節長度,-1代表無限制
//sqlite3_stmt **ppStmt? 外部聲明的sqlite3_stmt 對象的地址 例如”&ppStmt"
//const char **pzTail? 指向zSpl未使用的部分/* OUT: Pointer to unused portion of zSql */
例如
/*sqlite3_stmt *stmt;
sqlite3_prepare_v2(sql, "select * from user", -1, &stmt,NULL);*/
遍歷打印,其中sqlite3_step(sqlite3_stmt *)為迭代方法,其SQLITE_ROW= 100 ,其方法會返回一個狀態碼,與SQLITE_ROW對應
方法
sqlite3_column_int(sqlite3_stmt *, int iCol)//參數int iCol 為對應的列數,從0開始 ,返回為int型數據
sqlite3_column_text(sqlite3_stmt *, int iCol)//同上,返回const unsigned char *型數據,需進行轉化為char* 類型,后續轉NSString