SQLite簡介html
SQLite是一個進程內的輕量級嵌入式數據庫,它的數據庫就是一個文件,實現了自給自足、無服務器、零配置的、事務性的SQL數據庫引擎。它是一個零配置的數據庫,這就體現出來SQLite與其餘數據庫的最大的區別:SQLite不須要在系統中配置,直接可使用。且SQLite不是一個獨立的進程,能夠按應用程序需求進行靜態或動態鏈接。SQLite可直接訪問其存儲文件。正則表達式
SQLite對於其餘數據庫有什麼優點:sql
不須要配置,不準愛安裝和管理數據庫
不須要一個單獨的服務器進程或操做的系統(無服務器的)安全
一個完整的SQLite數據庫存儲在一個單一的跨平臺的磁盤文件上服務器
SQLite是一個自給自足的數據庫,這也就意味着不須要任何外部的依賴測試
SQLite事務是徹底兼容ACID的,容許從多個進程或線程安全訪問網站
SQLite支持SQL92(SQL2)標準的大多數查詢語言的功能spa
SQLite使用ANSI-C編寫的,並提供了簡單和易於使用的API
SQLite可在UINX(Linux,Max OS-X,Android,iOS)和Windows(Win32,WinCE,WinRT)中運行
SQLite的侷限性:
在SQLite中,SQL92不支持的特性以下所示:
RIGHT OUTER JOIN: 只實現了LEFT OUTER JOIN
FULL OUTER JOIN: 只實現了LEFT OUTER JOIN
ALTER TABLE: 支持RENAME TABLE和ALTER TABLE的ADD COLUMN variants命令,
不支持DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT
Trigger支持: 支持FOR EACH ROW觸發器,但不支持FOR EACH STATEMENT觸發器
VIEWS: 在SQLite中,視圖是隻讀的,不能在視圖中執行DELETE、INSERT或UPDATE語句
GRANT 和 REVOKE:能夠應用的惟一的訪問權限是底層操做系統的正常文件訪問權限
SQLite命令
與關係數據庫進行交互的標準SQLite命令相似於SQL。命令包括CREATE, SELECT, INSERT, UPDATE, DELETE和DROP。這些命令基於他們的操做性質分爲如下幾種:
DDL-數據庫定義語言
CREATE:建立一個新的表,一個表的視圖,或者數據庫中的其餘對象
ALTER:修改數據庫中的某個已有的數據庫對象,好比一個表
DROP:刪除整個表,或者表的視圖,或者數據庫中的其餘對象
DML-數據庫操做語言
INSERT:建立一條記錄
UPDATE:修改記錄
DELETE:刪除記錄
DQL-數據查詢語言
SELECT:從一個或多個表中檢索某些記錄
SQLite3的下載與使用:
(1)下載:SQLite3是目前最新的SQLite版本。能夠從http://www.sqlite.org/download.html網站上下載SQLite3的源代碼。下載完成後,解壓到某一盤符下。
(2)注意:SQLite3支持的基本數據類型主要有如下幾類:
1).NULL------------------blob
2).INTEGER---------------int
3).REAL------------------float、double
4).TEXT------------------char、varchar
5).NUMERIC---------------其他
(3)使用:
1)在Windows平臺下,打開Dos窗口,切換到含有剛解壓的sqlite3.exe的目錄下,輸入 sqlite3 -version後回車,出現對應的版本號信息 :
2) 數據庫的使用與建立:假設須要使用一個test.db數據庫,只需在命令行下輸入 「sqlite3 test.db」便可,若是數據庫test.db已經存在,則命令「sqlite3 test.db」會在當前目錄下打開test.db。若是數據庫test.db不存在,則命會在當前目錄下新建數據庫test.db。爲了提升效率,sqlite3並不會立刻建立test.db,而是等到第一個表建立完成後纔會在物理上建立數據庫。
3)數據庫的查詢:使用「.database」命令能夠查詢所在在使用的數據庫。
4)表建立:因爲SQLite3是弱類型的數據庫,因此在create語句中並不要求給出列的類型(固然給出也不錯)。另外注意,因此的SQL指令都是以分號(;)結尾的。若是遇到兩個減號(–)則表明註解,sqlite3會略過去。
5)數據庫的表查詢:使用命令「.table」能夠查詢數據庫中的表有哪些。
6)插入
7)查詢
查詢全部:
按指定條件查詢和查詢指定字段:
模糊查詢:
8)更新:
9)刪除:
10)其餘說明:
a.批量提交數據
sqlite> begin;
sqlite> insert into test_table values ('xiaoxue', 'female', 18);
sqlite> insert into test_table values ('xiaoliu', 'male', 20);
sqlite> commit;
b.設置主鍵,使用命令「paimary key」
注意:超出所定義的範圍和類型是沒有關係的
c.模糊查詢
1,% :表示任意0個或多個字符。可匹配任意類型和長度的字符,有些狀況下如果中文,請使用兩個百分號(%%)表示。
好比 SELECT * FROM [user] WHERE u_name LIKE '%三%'
將會把u_name爲「張三」,「張貓三」、「三腳貓」,「唐三藏」等等有「三」的記錄全找出來。
另外,若是須要找出u_name中既有「三」又有「貓」的記錄,請使用and條件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
2,_ : 表示任意單個字符。匹配單個任意字符,它經常使用來限制表達式的字符長度語句:
好比 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出「唐三藏」這樣u_name爲三個字且中間一個字是「三」的;
再好比 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出「三腳貓」這樣name爲三個字且第一個字是「三」的;
3,[ ] :表示括號內所列字符中的一個(相似正則表達式)。指定一個字符、字符串或範圍,要求所匹配對象爲它們中的任一個。
好比 SELECT * FROM [user] WHERE u_name LIKE '[張李王]三'
將找出「張三」、「李三」、「王三」(而不是「張李王三」);
如 [ ] 內有一系列字符(0123四、abcde之類的)則可略寫爲「0-4」、「a-e」
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
將找出「老1」、「老2」、……、「老9」;
4,[^ ] :表示不在括號所列以內的單個字符。其取值和 [] 相同,但它要求所匹配對象爲指定字符之外的任一個字符。
好比 SELECT * FROM [user] WHERE u_name LIKE '[^張李王]三'
將找出不姓「張」、「李」、「王」的「趙三」、「孫三」等;
d.SQLite內置命令:
見以下經常使用示例:
1). 備份和還原數據庫。
--在當前鏈接的main數據庫中建立一個數據表,以後再經過.backup命令將main數據庫備份到D:/mydb.db文件中。
sqlite> CREATE TABLE mytable (first_col integer);
sqlite> .backup 'D:/mydb.db'
sqlite> .exit
--經過在命令行窗口下執行sqlite3.exe以從新創建和SQLite的鏈接。
--從備份文件D:/mydb.db中恢復數據到當前鏈接的main數據庫中,再經過.tables命令能夠看到mytable表。
sqlite> .restore 'D:/mydb.db'
sqlite> .tables
mytable
2). DUMP數據表的建立語句到指定文件。
--先將命令行當前的輸出重定向到D:/myoutput.txt,以後在將以前建立的mytable表的聲明語句輸出到該文件。
sqlite> .output D:/myoutput.txt
sqlite> .dump mytabl%
sqlite> .exit
--在DOS環境下用記事本打開目標文件。
D:\>notepad myoutput.txt
3). 顯示當前鏈接的全部Attached數據庫和main數據庫。
sqlite> ATTACH DATABASE 'D:/mydb.db' AS mydb;
sqlite> .databases
seq name file
--- --------------- ------------------------
0 main
2 mydb D:\mydb.db
4). 顯示main數據庫中的全部數據表。
sqlite> .tables
mytable
5). 顯示匹配表名mytabl%的數據表的全部索引。
sqlite> CREATE INDEX myindex on mytable(first_col);
sqlite> .indices mytabl%
myindex
6). 顯示匹配表名mytable%的數據表的Schema信息。
--依賴該表的索引信息也被輸出。
sqlite> .schema mytabl%
CREATE TABLE mytable (first_col integer);
CREATE INDEX myindex on mytable(first_col);
7). 格式化顯示SELECT的輸出信息。
--插入測試數據
sqlite> INSERT INTO mytable VALUES(1);
sqlite> INSERT INTO mytable VALUES(2);
sqlite> INSERT INTO mytable VALUES(3);
--請注意沒有任何設置時SELECT結果集的輸出格式。
sqlite> SELECT * FROM mytable;
1
2
3
--顯示SELECT結果集的列名。
--以列的形式顯示各個字段。
--將其後輸出的第一列顯示寬度設置爲10.
sqlite> .header on
sqlite> .mode column
sqlite> .width 10
sqlite> SELECT * FROM mytable;
first_col
----------
1
2
3
e.找不到SQLite3.dll的解決辦法
直接拷貝SQLite3.dll文件到系統目錄裏:
Windows NT/2000系統,把這個文件複製到c:\WINNT\System32目錄下。
Windows XP/WIN7系統,把這個文件複製到c:\Windows\System32目錄下。
Windows 95/98/Me系統,把這個文件複製到c:\Windows\System目錄下。
而後打開"開始-運行-輸入regsvr32 此文件名稱",再按回車錯誤就得以解決了!
說明:動態連接庫英文爲DLL,是Dynamic Link Library 的縮寫形式,DLL是一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。動態連接提供了一種方法,使進程能夠調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、連接並與使用它們的進程分開存儲的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個DLL 副本的內容。DLL 是一個包含可由多個程序同時使用的代碼和數據的庫。
參考:http://www.javashuo.com/article/p-fpajyrzc-bc.html