1.sql
sqlite是輕量型、關係型管理系統,是嵌入式的,佔用資源低、可移植性強,比mySql處理速度快,如今主流的版本是sqlite3數據庫
2.函數
sqlite中的數據類型有TEXT(字符串,採用UTF-8,UTF-16編碼)、(REAL)浮點型、(INTEGER)有符號的整型、(BLOB)大二進制數據,能存聽任何二進制數據、還有其餘幾個不經常使用的( (VARCHAR、CHAR、CLOB)會轉化成TEXT的類型 (FLOAT DOUBLE)轉化成REAL類型 (NUMERIC)轉化成INTEGER)編碼
注:sqlite中沒有布爾型,能夠用integer的0和1代替,也沒有時間和日期的類型,能夠用TEXT,REAL等代替spa
3.指針
經常使用的基本的sql語句有:sqlite
------建立表:對象
creat table 表名 (字段1,字段2,字段3.......);索引
-------若是表不存在,再建立資源
creat table if not exists 表名 (字段1,字段2,字段3.......)
--------刪除整張表:
drop table 表名
--------插入數據:
insert into 表名 (字段1,字段2,字段3.......)values (值1,值2,值3......)
---------查詢:
select 字段名 from 表名 ---------》查詢某一字段的數據
select * from 表名 ---------》查詢全部字段的全部數據
----------修改:
update 表名 set 字段名 = '新值' where 查詢條件
4.寫代碼以前須要在link frameWorks and libraries 裏面添加sqlite3的動態庫,在數據庫相關操做的類中添加頭文件,就能夠了。
通常數據庫咱們要在沙盒的document文件夾下建立一個文件,來做爲數據庫的保存路徑。
5.建立sqlite3 * db 這樣一個數據庫的對象。sqlite是c語言的類庫,函數都爲c語言的函數
打開數據庫的方法:
sqlite3_open([filePath UTF8String], &DB); -------------》第一個參數爲數據庫的存儲路徑,第二個參數爲數 據庫取地址,是有返回值的,若返回值爲SQLITE_OK即打開成功。
若是數據庫打開成功,就能夠建立表了,先寫sql語句,再用執行函數進行執行:
例如:
NSString * creatSql = @"CREATE TABLE IF NOT EXISTS StudentNum (idNum TEXT PRIMARY KEY,name TEXT);";
char * err;
/**
第一個參數 DB對象
第二個參數 sql語句
第三個和第四個參數 回調函數和回調函數傳遞的參數
第五個參數 是一個錯誤信息
*/
if (sqlite3_exec(DB, [creatSql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
//失敗
}else{
//建立表成功
}
在打開數據庫、建立表失敗等的狀況下 也須要關閉數據庫,也能夠拋出錯誤信息:
sqlite3_close(DB);
NSAssert(NO, @"建立表失敗");
最後數據庫操做完畢以後也要關閉數據庫
6.查詢數據:
在數據庫打開成功的狀況下就能夠進行查詢了。
這條sql語句中的?是佔位符。
NSString * sql = @"SELECT idNum,name FROM StudentNum where idNum = ?";
sqlite3_stmt * statement;//語句對象
//預處理函數
/*
第一個參數:數據庫對象
第二個參數:sql語句
第三個參數:執行語句的長度-1指所有長度
第四個參數:語句對象
第五個參數:沒有執行的語句部分
*/
if (sqlite3_prepare_v2(DB, [sql UTF8String], -1, &statement, NULL) == SQLITE_OK) {
NSString * idNum = model.idNum;
//綁定函數,綁定佔位符要代替的內容
/*
第一個參數:語句對象
第二個參數:數據開始執行的序號
第三個參數:咱們要綁定的值
第四個參數:綁定的字符串的長度
第五個參數:指針 NULL
*/
sqlite3_bind_text(statement, 1, [idNum UTF8String], -1, NULL);
//遍歷去查詢結果 返回值爲SQLITE_ROW時表明查詢出結果了,可是不能保證全部的數據都遍歷了
if (sqlite3_step(statement) == SQLITE_ROW) {
//提取數據
/*
第一個參數:語句對象
第二個參數:字段的索引
*/
char * idNum = (char *)sqlite3_column_text(statement, 0)
;
NSString * idNumStr = [[NSString alloc]initWithUTF8String:idNum];
char * name = (char *)sqlite3_column_text(statement, 1);
NSString * nameStr = [[NSString alloc]initWithUTF8String:name];
studentModel * selectModel = [[studentModel alloc]init];
selectModel.idNum = idNumStr;
selectModel.name = nameStr;
//查詢到數據以後釋放語句對象,並關閉數據庫
sqlite3_finalize(statement);
sqlite3_close(DB);
}
}
相同,當打開數據庫失敗的時候也是要關閉數據庫,拋出異常語句
增刪改的順序和上面查詢的代碼順序是同樣的,先打開數據庫,而後進行預處理,而後綁定,而後遍歷數據,而後提取數據,而後釋放對象、關閉數據庫。