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初始化緩存區
sqlite3_prepare_v2執行查詢語句
sqlite3_step while循環逐步執行sqlite_step(stmt)如果stmt中還有未讀取的數據返回SQLITE_ROW如讀取完畢返回SQLITE_DON
sqlite3_column_datatype
sqlite3_finalize釋放緩沖區
sqlite3_close關閉數據庫
打開sqlite3_open參數1數據庫文件路徑參數2數據庫指針的地址如果數據庫不存在該方法會創建一個數據庫并打開
如果打開失敗關閉數據庫
斷言NSAssert(條件,….)如果條件為假crash崩潰并輸出字符串
斷言表達式不成立程序crash打印輸出
創建表
sql語句execute
sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg)
sqlite3_exec 參數1sqlite3 * 數據庫; ?參數2char *sql sql語句轉化的C字符串; 參數3*callbackC語言的回調方法; 參數4void *回調方法的第一個參數. 參數5**errmsg錯誤信息雙指針
存數據
打開數據庫sqlite3_open
創建sql語句
初始化句柄sqlite3_stmt *stmt = NULL
準備存數據sqlite3_prepare_v2把SQL語句編譯成字節碼留給后面的執行函數(不執行)
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:數據庫句柄
zSql:語句
nByte:如果nByte小于0,則函數取出zSql從開始到第一0終止符的內容l如果nByte不是負的,那么它就是這個函數能從zSql中讀取的字節數的最大值。
pZtail:上面提到zSql在遇見終止符或者是達到設定的nByte之后結束,假如zSql還有剩余的內容,那y這些剩余的內容被存放到pZtail中,不包括終止符
ppStmt:能夠使用sqlite3_step()執行的編譯好的準備語句的句柄,如果錯誤發生,它被置為NULL,如假如輸入的文本不包括sql語句。調用過程必須負責在編譯好的sql語句完成使用后使用sqlite3_finalize()刪除stmt中的內容。
向stmt中綁定內容sqlite3_bind_datatype 1、句柄2、字段索引從1開始3、值4、值長度5、函數指針不需要傳null
執行stmt即編譯好的sql語句獲得結果的一行sqlite3_step返回SQLITE_DONE
釋放緩沖區sqlite3_finalize
關閉數據庫sqlite3_close
讀數據
打開數據庫sqlite3_open
創建sql語句
初始化緩存區sqlite3_stmt *stmt = NULL
準備執行查詢語句sqlite3_prepare_v2
while循環逐步執行sqlite_step(stmt)如果stmt中還有未讀取的數據返回SQLITE_ROW如讀取完畢返回SQLITE_DONE
取數據sqlite3_column_datatype索引從0開始
釋放緩沖區sqlite_finalize
關閉數據庫sqlite_close
SQLite語句四中數據類型:
Int 整型 ? ?text文本字符串real 浮點型bool 存放較大的二進制數據
1.創建表
CREAT TABLE 表名(字段1,字段2,字段3)
exp:CREAT TABLE Teacher (name text, age int, sex text);
2.插入一條數據
INSERT INTO 表名(字段1,字段2,字段3)VALUES (值1,值2,值3)
值要和字段一一對應 且不能少 為文本的字段時 加引號(單雙皆可)浮點型不用
3.查詢數據
SELECT 字段 FROM 表名
SELECT 字段,字段,字段 FROM 表名
SELECT * FROM 表名
WHERE語句用于有條件地從表中選取數據可將WHERE子句添加到SELECT語句
語法
在SELECT查詢語句后+WHERE字段名運算符值
SELECT*FROMStudentsWHEREname =? '張三';
數據庫提供內置函數:MAX(最大值), MIN(最小值), AVG(平均值)SUM(總值)
SELECT MAX(字段名) FROM表名
SELECT*FROMStudentsWHEREageBETWEEN10AND100
運算符有=,<>(不等于!=),>,<,>=,<=,BETWEEN(在某個范圍內前閉后閉),LIKE(搜索某種模式%可以代表任意一串字符_代表一個任意字符)
abcd
_b%
查詢有d的字符串%d%
SELECT*FROMAAAWHEREcolumn1LIKE'%d%'
查詢第二位有b的字符串_b%
SELECT*FROMAAAWHEREcolumn1LIKE'_b%'
引號:SQL使用單引號(也支持雙引號)來環繞文本值。如果是數值,則不要使用引號
4.修改數據
UPDATE表名稱SET列名稱=新值WHERE列名稱=某值(where后是一個條件)
UPDATE表名稱SET列名稱=新值,列名稱=新值WHERE列名稱=某值
5.刪除數據
DELETE用于刪除表中的行
語法:
DELETE FROM表名稱WHERE列名稱=值
DELETEFROMStudentsWHEREname = '小芳'
刪除所有行即在不刪除表的情況下刪除所有的行,表的結構、索引、字段都是完整的
DELETE FROM表名
DELETEFROMTeacher
6.約束
SQL約束用于限制加入表的數據的類型。可以在創建表時規定約束,或者表創建過后也可以,主要有以下幾種約束
NOT NULL約束強制列不接受空值空值無法插入新紀錄或更新紀錄
UNIQUE約束唯一標識數據庫表中的某個字段
PRIMARY KEY主鍵每個表中都應有且只能有一個主鍵主鍵列不能為NULL值
FOREIGN KEY外鍵關鍵表
DEFAULT給字段添加默認值
AUTOINCREMENT自動增長
7.查詢不重復的數據
SELECT DISTINCT列名稱FROM表名稱
SELECTDISTINCTnameFROMStudents
SELECTDISTINCT*FROMStudents
8.AND和OR
如果兩個條件都成立AND運算符返回一條數據
SELECT*FROMStudentsWHEREname='張三'ANDweight = '50'
只要一個條件成立OR運算符就返回一條數據
SELECT*FROMStudentsWHEREname='張三'ORweight = ’50'
9.OREDR BY
根據指定列對結果集進行排序默認按照升序對記錄進行排序降序使用關鍵字DESC升序ASC
的 ORDER BY子句是用來遞增或遞減的順序,根據一個或多個列中的數據進行排序。
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