iOS基礎-SQLite數據庫--基礎總結
數據庫管理系統
- SQL: SQL 是Structured Query Language(結構化查詢語言)的縮寫,SQL是專為數據庫而建立的操作命令集,是一種功能齊全的數據庫語言.
常見的數據庫:
- My SQL : MySQL是一個精巧的SQL數據庫管理系統優點:免費,輕量級
- Oracle : 甲骨文公司的一款關系數據庫管理系統.系統可移植性好,使用方便,功能強.
數據庫特征:
- 以一定的方式存儲在一起(表結構)
- 能為多個用戶共享
- 具有盡可能少的冗余代碼
- 與程序彼此獨立的數據集合
- 數據庫(Database)是按照數據結構來組織,存儲和管理數據的倉庫.
數據庫SQLite優點
1: 是一款輕量級嵌入式數據庫 (用于移動端).
2: 處理數據的速度,比MySql還要快.
3: SQLite不需要進行配置,這就意味著不需要安裝
4: 它是一個不需要單獨服務器進行操作的系統.
5: SQLite 是非常小,完全配置時小于400K,當省略一些可選文件時,小于250K.
6: SQLite 是自給自足的,也就意味著不需要任何外部依賴.
數據庫分類
- 關系型數據庫(主流)
- 1: 關系型數據庫(主流): 關系型數據庫是以行和列的形式存儲數據,這種形式被稱為表 (二維表格) ,組成數據庫.
- 1.1: 關系: 可以理解為一張為二維表,每一個關系都有一個關系名,也就是 表名.
- 1.2: 屬性: 可以理解為二維表中的一列,在數據庫中稱為 字段.
- 1.3: 元組: 可以理解為二維表中的一行,在數據庫中稱為 記錄.
- 1.4: 域: 屬性的取值范圍,也就是數據庫中某一列的 取值范圍.
- 1.5: 關鍵字: 一組可以唯一標識元組的屬性. 數據庫中稱為主鍵. 可以由一個或者多個列組成.
表: 是數據庫中一個非常重要的對象,是其他對象的基礎.
字段: 表的”列”成為”字段” , 每個字段包含某一專題的信息.
記錄: 是指對應于數據表中一行信息的一組完整的相關信息.
- 對象型數據庫
- 對象型數據庫: 把面向對象的方法和數據庫的技術結合起來,使得數據庫系統的分析, 設計盡可能最大程度的和人的思想, 以及對世界的認識保持一致.
- 層次性數據庫
- 常用關系型數據庫: PC :Orcsle ,My SQL ,SQL Server.Access.DB2 ;嵌入式:SQLite;
SQL語句:
- 什么是SQL:
1: SQL 是Structured Query Language(結構化查詢語言)的縮寫,SQL是專為數據庫而建立的操作命令集,是一種功能齊全的數據庫語言.
2: 是一種關系型數據庫,對數據庫進行定義和 (增,刪,改,查)的語言.
- SQL語句:
1: 用SQL語言編寫的句子,代碼.
2: 在運行程序過程中,要操作 (增刪改查:CRUD)數據庫中的數據,必須使用SQL語句. - SQl語句特點:
1: 不區分大小寫 (例如: 在數據庫中user和UsEr是一樣的).
2: 注意: 每條語句必須用分號";"結束.不能用關鍵字命名表,字段. - SQl語句種類
1: 數據定義語句 (DDL: Data Definition language): 用來定義表的結構, 包括create tabel (建表), drop tabel (刪表) 等操作.
2: 數據操作語句 (DMl: Data Manipulate language):用來修改表內容, 包括insert, delete, update等.
3: 數據查詢語句 (DQl: Data Query language): 用來查詢表內數據,關鍵字是select (也是DQL中 和 SQL中用得最多的操作). - SQL語句關鍵字
建表命令: (Create table)
數據插入命令:(Insert)
數據庫更新命令:(Update)
數據庫刪除命令:(Delete)
數據庫檢索命令:(Select) - 數據庫的存儲步驟:
第 1 步 : 新建一張表.
第 2 步 : 添加多個字段 (列, 屬性, column).
第 3 步 : 增加多條記錄 (record, row:用于存放多個字段的對應值).
SQLite是無類型的數據庫,可以保存任何類型的數據,對于SQLite來說對字段不指定類型是完全有效的.
SQLite近似類規則:

SQLite字段約束條件:
NOT NULL -非空(必填選項)
UNIQUE - 唯一(不能重復)
PRIMARY KEY - 主鍵(一般設置為integer或NSString;特點:1: NOT NULL 不為空 2: UNIQUE 不重復,(唯一標識))
FOREIGN KEY - 外鍵(該字段作為另一個表的主鍵,鏈表查詢)
AUTOINCREMENT - 自增量變量(一般設置Integer設置,它會自動根據上一條數據自增)
CHECK -條件檢查(確保一列中所有值滿足一定條件)
DEFAULT - 默認
表里可以沒有主鍵,主鍵不是必填選項,當把一個字段設置為PRIMARY KEY 那么這個字段為必填選項 (不可為空,不能重復)
去
字段類型一定要填

注:如果值是字符串或字符類型,需要用單引號括起來
update

update stu set gender = ‘ 女’ where gender = ‘男' ; 整列修改
update stu set gender = ‘ 女’ where name = ‘班長' ; 單條修改
delete

從stu里刪除所有年齡為10的數據
查詢select

查詢一個表里所有數據當 select * from stu where name = ‘班長' ;
SQLite語法:
- 執行sql語句 :sqlite3_exec()可以執行任何SQL語句,比如創表,更新,插入和刪除操作.但是一般不用于它執行查詢語句,因為它不會返回查詢到的數據
執行SQL語句
/*
sqlite3_exec
參數1: sqlite3 *, 數據庫
參數2: const char *sql, SQL語句轉化成C語言格式
參數3: int (*callback)(void *, int, char **, char **), 結果的回調函數
參數4: void *,回調一個函數參數
參數5: char **errmsg 錯誤信息
*/
- 預執行:sqlite3_prepare( ) 這個函數將sql文本轉換成一個準備語句(prepared statement)對象,同時返回這個對象的指針.他實際上并不執行(evaluate)這個SQL語句,他僅僅為執行準備這個sql語句.
預執行語句:
sqlite3_prepare(
參數1: sqlite3 *db, 數據庫.
參數2: const char *zSql, SQL語句轉格式.
參數3: int nByte, 有正負之分,字節數 (正: 代表只往后讀一個字節 負: 遇到特殊(結束)符號才會結束(\100,u000))
參數4: sqlite3_stmt **ppStmt, 伴隨指針的地址.
參數5: const char **pzTail 取值不全的話,剩下的值全部存在這里,一般 NULL .
- sqlite3_bind_( ) 給宿主參數(host parameters) 綁定值( 代表不同類型)
綁定函數: sqlite3_bind_text(
參數1: sqlite3_stmt *, 伴隨指針-->綁定參數,獲取數據.
參數2: int, 綁定values的值("也就是?")的位置,從 1 開始.
參數3: const char *, 表示你要插入綁定數據的值(UTF8String)
參數4: int, 取字節數,有正負之分,字節數 (正: 代表只往后讀一個字節 負: 遇到特殊(結束)符號才會結束(\100,u000))
參數5: void (*)(void *) SQLITE3執行完操作后回調此函數,通常用于釋放字符串占用的內存
)
sqlite3_step ( ) 一次或多次來執行前面sqlite3_prepare 創建的準備語句<>
sqlite3_column( ) 這個過程從執行 sqlite3_step( ) 執行一個準備語句得到的結果集的當前行中返回一個列. 每次 sqlite3_step 得到一個結果集的列停下后,這個過程就可以被多次調用去查詢這個行的各列的值. 對列操作是有多個函數,均以sqlite3_column為前綴
sqlite3_column_text(
參數 1 : sqlite3_stmt 從sqlite3_prepare返回來的prepared statement對象的指針
參數 2 : int iCol 指定這一行中想要被返回的列的索引即(從0 開始)前面SQL語句字段順序的索引 (如果SQL 寫的* 則索引順序即表格里字段的順序, 如果不同則表示的是SQL語句中字段的順序)>
- sqlite3_finalize( ) 這個過程銷毀前面被 sqlite3_prepare 數據庫創建的準備語句,每個準備語句都必須使用這個函數去銷毀以防止內存泄露
defineSQLITE_OK 0 /* 成功 | Successful result */
/錯誤碼開始/
defineSQLITE_ERROR 1 /* SQL錯誤 或 丟失數據庫 | SQL error or missing database */
defineSQLITE_INTERNAL 2 /* SQLite 內部邏輯錯誤 | Internal logic error in SQLite */
defineSQLITE_PERM 3 /* 拒絕訪問 | Access permission denied */
defineSQLITE_ABORT 4 /* 回調函數請求取消操作 | Callback routine requested an abort */
defineSQLITE_BUSY 5 /* 數據庫文件被鎖定 | The database file is locked */
defineSQLITE_LOCKED 6 /* 數據庫中的一個表被鎖定 | A table in the database is locked */
defineSQLITE_NOMEM 7 /* 某次 malloc() 函數調用失敗 | A malloc() failed */
defineSQLITE_READONLY 8 /* 嘗試寫入一個只讀數據庫 | Attempt to write a readonly database */
defineSQLITE_INTERRUPT 9 /* 操作被 sqlite3_interupt() 函數中斷 | Operation terminated by sqlite3_interrupt() */
defineSQLITE_IOERR 10 /* 發生某些磁盤 I/O 錯誤 | Some kind of disk I/O error occurred */
defineSQLITE_CORRUPT 11 /* 數據庫磁盤映像不正確 | The database disk image is malformed */
defineSQLITE_NOTFOUND 12 /* sqlite3_file_control() 中出現未知操作數 | Unknown opcode in sqlite3_file_control() */
defineSQLITE_FULL 13 /* 因為數據庫滿導致插入失敗 | Insertion failed because database is full */
defineSQLITE_CANTOPEN 14 /* 無法打開數據庫文件 | Unable to open the database file */
defineSQLITE_PROTOCOL 15 /* 數據庫鎖定協議錯誤 | Database lock protocol error */
defineSQLITE_EMPTY 16 /* 數據庫為空 | Database is empty */
defineSQLITE_SCHEMA 17 /* 數據結構發生改變 | The database schema changed */
defineSQLITE_TOOBIG 18 /* 字符串或二進制數據超過大小限制 | String or BLOB exceeds size limit */
defineSQLITE_CONSTRAINT 19 /* 由于約束違例而取消 | Abort due to constraint violation */
defineSQLITE_MISMATCH 20 /* 數據類型不匹配 | Data type mismatch */
defineSQLITE_MISUSE 21 /* 不正確的庫使用 | Library used incorrectly */
defineSQLITE_NOLFS 22 /* 使用了操作系統不支持的功能 | Uses OS features not supported on host */
defineSQLITE_AUTH 23 /* 授權失敗 | Authorization denied */
defineSQLITE_FORMAT 24 /* 附加數據庫格式錯誤 | Auxiliary database format error */
defineSQLITE_RANGE 25 /* 傳遞給sqlite3_bind()的第二個參數超出范圍 | 2nd parameter to sqlite3_bind out of range */
defineSQLITE_NOTADB 26 /* 被打開的文件不是一個數據庫文件 | File opened that is not a database file */
defineSQLITE_ROW 100 /* sqlite3_step() 已經產生一個行結果 | sqlite3_step() has another row ready */
defineSQLITE_DONE 101 /* sqlite3_step() 完成執行操作 | sqlite3_step() has finished executing */
/錯誤碼結束/
智能推薦
sqlite數據庫的使用總結
1.創建模型類: 2.在admin中注冊: 3.同步數據庫: python manage.py makemigrations python manage.py migrate 4.創建超級用戶: python manage.py createsuperuser 5.把網頁英文頁面改成中文頁面 6.orm 一對一正向查詢: 反向查詢: 多對多正向查詢: #多對多正向查詢,查詢張三教過的學生 teac...
數據庫基礎總結 || 一 ||
數據庫概述 數據庫是什么? 存儲數據的倉庫,本質上就是存儲數據的文件系統(文件夾) 數據據庫管理系統 MYSQL :開源免費的數據庫,小型的數據庫.已經被Oracle收購了.MySQL6.x版本也開始收費。 Oracle :收費的大型數據庫,Oracle公司的產品。Oracle收購SUN公司,收購MYSQL。 dos命令操作數據庫 啟動數據庫和關閉數據庫 方式一: 操作windows服務 方式二:...
mysql數據庫基礎總結
一.下載mysql: 官網下載地址: https://dev.mysql.com/downloads/mysql/ 二.mysql目錄 1、bin目錄 2、data目錄 3、include目錄 4、lib目錄 5、share目錄 6、my.ini 7、my-huge.ini 8、my-large.ini 9、my-medium.ini 10、my-small.ini 11、my-template....
oracle數據庫基礎使用總結
一、oracle簡介 oracle創始人拉里·埃里森 拉里·埃里森和三個朋友合伙于1977年成立了軟件開發研究公司,其個人持股60%。 之后軟件開發研究公司為美國中央情報局開發了名為oracle的數據庫,從此名聲大噪。 軟件開發研究公司也因此改名為oracle。 1989年oracle進入中國以甲骨文命名。 oracle以數據存儲量大,處理速度快,安全性高,容錯性強等出...
IOS學習筆記15——SQLite數據庫
SQLite是MySQL的簡化版,更多的運用與移動設備或小型設備上。SQLite的優點是具有可移植性,它不需要服務器就能運行,同時,它也存在一些缺陷,首先,沒有提供簡單的數據庫創建方式,必須手工創建數據庫,其次,SQLite沒有面向對象接口,必須使用依賴于C語言代碼的API。相對于OC,這套API既不那么優雅,也更難使用。當相比于用文件進行存儲,還是更推薦使用SQLite進行數據存儲。 下面來看下...
猜你喜歡
iOS數據庫的使用(三):sqlite多線程
引言 首先,sqlite支持多線程,但是是有條件的支持,也就是同一個連接不能在多線程中使用,不同連接才可以在多線程中使用。這個是最宏觀的sqlite多線程準則。 另外,sqlite的文件鎖是粗顆粒的,也就是以數據庫文件為維度加鎖,涉及到5種鎖狀態。5中鎖狀態可以使用一句話來總結:sqlite在普通情況(非普通情況就是shared-cache+wal模式)下支持并發讀取操作,但是不支持并發寫入操作,...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...