SQLite3使用:
insert data
sqlite3_open
sqlite3_stmt
sqlite3_prepare_v2
sqlite3_bind_text
sqlite3_step
sqlite3_finalize
sqlite3_close
query data
sqlite3_open
sqlite3_stmt初始化緩存區(qū)
sqlite3_prepare_v2執(zhí)行查詢語句
sqlite3_step while循環(huán)逐步執(zhí)行sqlite_step(stmt)如果stmt中還有未讀取的數(shù)據(jù)返回SQLITE_ROW如讀取完畢返回SQLITE_DON
sqlite3_column_datatype
sqlite3_finalize釋放緩沖區(qū)
sqlite3_close關(guān)閉數(shù)據(jù)庫
打開sqlite3_open參數(shù)1數(shù)據(jù)庫文件路徑參數(shù)2數(shù)據(jù)庫指針的地址如果數(shù)據(jù)庫不存在該方法會創(chuàng)建一個數(shù)據(jù)庫并打開
如果打開失敗關(guān)閉數(shù)據(jù)庫
斷言NSAssert(條件,….)如果條件為假crash崩潰并輸出字符串
斷言表達式不成立程序crash打印輸出
創(chuàng)建表
sql語句execute
sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg)
sqlite3_exec 參數(shù)1sqlite3 * 數(shù)據(jù)庫; ?參數(shù)2char *sql sql語句轉(zhuǎn)化的C字符串; 參數(shù)3*callbackC語言的回調(diào)方法; 參數(shù)4void *回調(diào)方法的第一個參數(shù). 參數(shù)5**errmsg錯誤信息雙指針
存數(shù)據(jù)
打開數(shù)據(jù)庫sqlite3_open
創(chuàng)建sql語句
初始化句柄sqlite3_stmt *stmt = NULL
準備存數(shù)據(jù)sqlite3_prepare_v2把SQL語句編譯成字節(jié)碼留給后面的執(zhí)行函數(shù)(不執(zhí)行)
sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)
sqlite3_prepare_v2(db, [checkIsHaveSql UTF8String], -1, &stmt, nil)
db:數(shù)據(jù)庫句柄
zSql:語句
nByte:如果nByte小于0,則函數(shù)取出zSql從開始到第一0終止符的內(nèi)容l如果nByte不是負的,那么它就是這個函數(shù)能從zSql中讀取的字節(jié)數(shù)的最大值送淆。
pZtail:上面提到zSql在遇見終止符或者是達到設(shè)定的nByte之后結(jié)束,假如zSql還有剩余的內(nèi)容,那y這些剩余的內(nèi)容被存放到pZtail中,不包括終止符
ppStmt:能夠使用sqlite3_step()執(zhí)行的編譯好的準備語句的句柄,如果錯誤發(fā)生,它被置為NULL,如假如輸入的文本不包括sql語句嘉抒。調(diào)用過程必須負責在編譯好的sql語句完成使用后使用sqlite3_finalize()刪除stmt中的內(nèi)容俗他。
向stmt中綁定內(nèi)容sqlite3_bind_datatype 1、句柄2怒允、字段索引從1開始3黎泣、值4、值長度5桑嘶、函數(shù)指針不需要傳null
執(zhí)行stmt即編譯好的sql語句獲得結(jié)果的一行sqlite3_step返回SQLITE_DONE
釋放緩沖區(qū)sqlite3_finalize
關(guān)閉數(shù)據(jù)庫sqlite3_close
讀數(shù)據(jù)
打開數(shù)據(jù)庫sqlite3_open
創(chuàng)建sql語句
初始化緩存區(qū)sqlite3_stmt *stmt = NULL
準備執(zhí)行查詢語句sqlite3_prepare_v2
while循環(huán)逐步執(zhí)行sqlite_step(stmt)如果stmt中還有未讀取的數(shù)據(jù)返回SQLITE_ROW如讀取完畢返回SQLITE_DONE
取數(shù)據(jù)sqlite3_column_datatype索引從0開始
釋放緩沖區(qū)sqlite_finalize
關(guān)閉數(shù)據(jù)庫sqlite_close
SQLite語句四中數(shù)據(jù)類型:
Int 整型 ? ?text文本字符串real 浮點型bool 存放較大的二進制數(shù)據(jù)
1.創(chuàng)建表
CREAT TABLE 表名(字段1,字段2躬充,字段3)
exp:CREAT TABLE Teacher (name text, age int, sex text);
2.插入一條數(shù)據(jù)
INSERT INTO 表名(字段1逃顶,字段2讨便,字段3)VALUES (值1,值2口蝠,值3)
值要和字段一一對應(yīng) 且不能少 為文本的字段時 加引號(單雙皆可)浮點型不用
3.查詢數(shù)據(jù)
SELECT 字段 FROM 表名
SELECT 字段器钟,字段津坑,字段 FROM 表名
SELECT * FROM 表名
WHERE語句用于有條件地從表中選取數(shù)據(jù)可將WHERE子句添加到SELECT語句
語法
在SELECT查詢語句后+WHERE字段名運算符值
SELECT*FROMStudentsWHEREname =? '張三';
數(shù)據(jù)庫提供內(nèi)置函數(shù):MAX(最大值), MIN(最小值), AVG(平均值)SUM(總值)
SELECT MAX(字段名) FROM表名
SELECT*FROMStudentsWHEREageBETWEEN10AND100
運算符有=妙蔗,<>(不等于!=),>疆瑰,<眉反,>=,<=穆役,BETWEEN(在某個范圍內(nèi)前閉后閉),LIKE(搜索某種模式%可以代表任意一串字符_代表一個任意字符)
abcd
_b%
查詢有d的字符串%d%
SELECT*FROMAAAWHEREcolumn1LIKE'%d%'
查詢第二位有b的字符串_b%
SELECT*FROMAAAWHEREcolumn1LIKE'_b%'
引號:SQL使用單引號(也支持雙引號)來環(huán)繞文本值寸五。如果是數(shù)值,則不要使用引號
4.修改數(shù)據(jù)
UPDATE表名稱SET列名稱=新值WHERE列名稱=某值(where后是一個條件)
UPDATE表名稱SET列名稱=新值耿币,列名稱=新值WHERE列名稱=某值
5.刪除數(shù)據(jù)
DELETE用于刪除表中的行
語法:
DELETE FROM表名稱WHERE列名稱=值
DELETEFROMStudentsWHEREname = '小芳'
刪除所有行即在不刪除表的情況下刪除所有的行梳杏,表的結(jié)構(gòu)、索引淹接、字段都是完整的
DELETE FROM表名
DELETEFROMTeacher
6.約束
SQL約束用于限制加入表的數(shù)據(jù)的類型十性。可以在創(chuàng)建表時規(guī)定約束塑悼,或者表創(chuàng)建過后也可以劲适,主要有以下幾種約束
NOT NULL約束強制列不接受空值空值無法插入新紀錄或更新紀錄
UNIQUE約束唯一標識數(shù)據(jù)庫表中的某個字段
PRIMARY KEY主鍵每個表中都應(yīng)有且只能有一個主鍵主鍵列不能為NULL值
FOREIGN KEY外鍵關(guān)鍵表
DEFAULT給字段添加默認值
AUTOINCREMENT自動增長
7.查詢不重復的數(shù)據(jù)
SELECT DISTINCT列名稱FROM表名稱
SELECTDISTINCTnameFROMStudents
SELECTDISTINCT*FROMStudents
8.AND和OR
如果兩個條件都成立AND運算符返回一條數(shù)據(jù)
SELECT*FROMStudentsWHEREname='張三'ANDweight = '50'
只要一個條件成立OR運算符就返回一條數(shù)據(jù)
SELECT*FROMStudentsWHEREname='張三'ORweight = ’50'
9.OREDR BY
根據(jù)指定列對結(jié)果集進行排序默認按照升序?qū)τ涗涍M行排序降序使用關(guān)鍵字DESC升序ASC
的 ORDER BY子句是用來遞增或遞減的順序,根據(jù)一個或多個列中的數(shù)據(jù)進行排序厢蒜。
SELECT字段名FROM表名稱ORDER BY字段名條件(DESC或ASC)
SELECT字段名霞势,字段名FROM表名稱ORDER BY字段名條件,字段名條件(DESC或ASC)
SELECT*FROMStudentsORDERBYnameDESC, ageDESC
select ?*from?students order by name desc,age desc
select age,name??fromstudents?order by age desc,name desc