免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
SQLite數(shù)據(jù)庫簡介

大家好,今天來介紹一下SQLite的相關(guān)知識,并結(jié)合Java實現(xiàn)對SQLite數(shù)據(jù)庫的操作。

SQLite是D.Richard Hipp用C語言編寫的開源嵌入式數(shù)據(jù)庫引擎。它支持大多數(shù)的SQL92標(biāo)準(zhǔn),并且可以在所有主要的操作系統(tǒng)上運行。

SQLite由以下幾個部分組成:SQL編譯器、內(nèi)核、后端以及附件。SQLite通過利用虛擬機和虛擬數(shù)據(jù)庫引擎(VDBE),是調(diào)試、修改和擴展SQLite的內(nèi)核變得更加方便。所有SQL語句都被編譯成易讀的、可以在SQLite虛擬機中執(zhí)行的程序集。SQLite的整體結(jié)構(gòu)圖如下:


值得一提的是,袖珍型的SQLite竟然可以支持高達2TB大小的數(shù)據(jù)庫,每個數(shù)據(jù)庫都是以單個文件的形式存在,這些數(shù)據(jù)都是以B-Tree的數(shù)據(jù)結(jié)構(gòu)形式存儲在磁盤上。

在事務(wù)處理方面,SQLite通過數(shù)據(jù)庫級上的獨占性和共享鎖來實現(xiàn)獨立事務(wù)處理。這意味著多個進程可以在同一時間從同一數(shù)據(jù)庫讀取數(shù)據(jù),但只有一個可以寫入數(shù)據(jù)。在某個進程或線程想數(shù)據(jù)庫執(zhí)行寫操作之前,必須獲得獨占鎖。在獲得獨占鎖之后,其他的讀或?qū)懖僮鲗⒉粫侔l(fā)生。

SQLite采用動態(tài)數(shù)據(jù)類型,當(dāng)某個值插入到數(shù)據(jù)庫時,SQLite將會檢查它的類型,如果該類型與關(guān)聯(lián)的列不匹配,SQLite則會嘗試將該值轉(zhuǎn)換成該列的類型,如果不能轉(zhuǎn)換,則該值將作為本身的類型存儲,SQLite稱這為“弱類型”。但有一個特例,如果是INTEGER PRIMARY KEY,則其他類型不會被轉(zhuǎn)換,會報一個“datatype missmatch”的錯誤。

概括來講,SQLite支持NULL、INTEGER、REAL、TEXT和BLOB數(shù)據(jù)類型,分別代表空值、整型值、浮點值、字符串文本、二進制對象。

下面,我們就來親自操作一下SQLite數(shù)據(jù)庫。

在操作之前,朋友們要先下載SQLite數(shù)據(jù)庫,官方的下載頁面是http://sqlite.org/download.html,我是在Windows下試驗,所以我選擇了Precompiled Binaries For Windows下面的sqlite-shell-win32-x86和sqlite-analyzer-win32-x86的zip包,前者是SQLite數(shù)據(jù)庫引擎,后者是SQLite數(shù)據(jù)庫分析器,主要用于分析數(shù)據(jù)庫的狀態(tài)等信息,大家也可以根據(jù)自己的情況去下載。下載完成后分別解壓,得到兩個可執(zhí)行文件,如圖:


這兩個文件可以根據(jù)自己的喜好放置在指定的位置,我將其放在D盤根目錄下。下面我們就來一步一步操作SQLite:


創(chuàng)建數(shù)據(jù)庫:

  1. D:\>sqlite3 test.db  
  2. SQLite version 3.7.7.1 2011-06-28 17:39:05  
  3. Enter ".help" for instructions  
  4. Enter SQL statements terminated with a ";"  
  5. sqlite> .databases  
  6. seq  name             file  
  7.   
  8. ---  ---------------  ----------------------------------------------------------  
  9.   
  10. 0    main             D:\test.db  
  11.   
  12. sqlite>  
我們執(zhí)行了sqlite3命令,參數(shù)就是數(shù)據(jù)庫的名稱,如果該數(shù)據(jù)庫已存在,則使用,如果不存在,則新建一個,這里我們簡單的在當(dāng)前位置創(chuàng)建了test.db,你也可以在任何存在的并且可寫的目錄下創(chuàng)建自己的數(shù)據(jù)庫。(如果對于SQLite的命令不太熟悉,可以執(zhí)行“.help”命令列出所有的命令清單進行查看)。


創(chuàng)建表:

  1. sqlite> CREATE TABLE person (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20), age SMALLINT);  
  2. sqlite> .tables  
  3. person  
  4. sqlite> .schema person  
  5. CREATE TABLE person (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20), age SMALLINT);  
  6. sqlite>  
在我們創(chuàng)建表之后,可以用“.tables”命令去查看已有的表,用“.schema”命令去查看表的結(jié)構(gòu),如果后面沒有表名做參數(shù),則將會輸出所有表的建表語句。


插入數(shù)據(jù):

  1. sqlite> INSERT INTO person VALUES (NULL'john', 30);  
  2. sqlite> SELECT * FROM person;  
  3. 1|john|30  


從.sql文件導(dǎo)入數(shù)據(jù):

  1. sqlite> .read test.sql  
  2. sqlite> SELECT * FROM person;  
  3. 1|john|30  
  4. 2|david|35  
  5. 3|henry|40  
  6. sqlite>  


分析數(shù)據(jù)庫使用狀態(tài):

  1. D:\>sqlite3_analyzer test.db  
  2. /** Disk-Space Utilization Report For test.db  
  3.   
  4. Page size in bytes.................... 1024  
  5. Pages in the whole file (measured).... 4  
  6. Pages in the whole file (calculated).. 4  
  7. Pages that store data................. 4          100.0%  
  8. Pages on the freelist (per header).... 0            0.0%  
  9. Pages on the freelist (calculated).... 0            0.0%  
  10. Pages of auto-vacuum overhead......... 0            0.0%  
  11. Number of tables in the database...... 4  
  12. Number of indices..................... 0  
  13. Number of named indices............... 0  
  14. Automatically generated indices....... 0  
  15. Size of the file in bytes............. 4096  
  16. Bytes of user payload stored.......... 39           0.95%  
  17. ...  


備份數(shù)據(jù)庫:

備份 SQLite 數(shù)據(jù)庫有兩種方法。如果數(shù)據(jù)庫正在使用中,則應(yīng)從命令行界面使用 .dump 命令。這樣可以創(chuàng)建一個包含必要命令和數(shù)據(jù)的文件,從而重新創(chuàng)建數(shù)據(jù)庫。.dump 命令也可以用于備份數(shù)據(jù)庫表。

  1. sqlite> .dump  
  2. PRAGMA foreign_keys=OFF;  
  3. BEGIN TRANSACTION;  
  4. CREATE TABLE person (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20), age SMALLINT);  
  5. INSERT INTO "person" VALUES(1,'john',30);  
  6. INSERT INTO "person" VALUES(2,'david',35);  
  7. INSERT INTO "person" VALUES(3,'henry',40);  
  8. DELETE FROM sqlite_sequence;  
  9. INSERT INTO "sqlite_sequence" VALUES('person',3);  
  10. COMMIT;  
  11. sqlite> .output dump.sql  
  12. sqlite> .dump  
  13. sqlite>  
我們可以指定輸出的目標(biāo)為一個文件,然后再使用命令時,輸出信息就會寫入指定的文件,如果想恢復(fù)為標(biāo)準(zhǔn)輸出,可以這樣設(shè)定:

  1. sqlite> .output stdout  
  2. sqlite> .dump  
  3. PRAGMA foreign_keys=OFF;  
  4. BEGIN TRANSACTION;  
  5. CREATE TABLE person (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20), age SMALLINT);  
  6. INSERT INTO "person" VALUES(1,'john',30);  
  7. INSERT INTO "person" VALUES(2,'david',35);  
  8. INSERT INTO "person" VALUES(3,'henry',40);  
  9. DELETE FROM sqlite_sequence;  
  10. INSERT INTO "sqlite_sequence" VALUES('person',3);  
  11. COMMIT;  
  12. sqlite>  

如果數(shù)據(jù)庫沒有處于使用狀態(tài),則可以直接將數(shù)據(jù)庫文件復(fù)制到安全位置。

最后,我們可以使用“.quit”或“.exit”退出SQLite。


管理工具:

現(xiàn)在網(wǎng)絡(luò)上的SQLite管理工具很多,我向大家推薦一款好用的工具:SQLite Expert。



在Java中使用SQLite:

我們要想在Java中使用SQLite,需要下載SQLite相關(guān)驅(qū)動,推薦大家到http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC頁面去下載最新的驅(qū)動包,現(xiàn)在最新版本是sqlite-jdbc-3.7.2.jar,體積有點大,因為它包含了Linux、Mac、Windows的本地類庫,如圖:


下載了驅(qū)動之后,我們新建一個項目,名為sqlite:


在上圖中,我們引入sqlite驅(qū)動包到類路徑下,然后建立一個db的文件夾,用于放置數(shù)據(jù)庫文件。最后我們看一下Test.java代碼:

  1. package com.scott.sqlite;  
  2. import java.sql.Connection;  
  3. import java.sql.DriverManager;  
  4. import java.sql.ResultSet;  
  5. import java.sql.Statement;  
  6.   
  7. public class Test {  
  8.     public static void main(String[] args) throws Exception {  
  9.         Class.forName("org.sqlite.JDBC");  
  10.         Connection conn = DriverManager.getConnection("jdbc:sqlite:db/test.db");  
  11.         Statement stmt = conn.createStatement();  
  12.   
  13.         stmt.executeUpdate("DROP TABLE IF EXISTS person");  
  14.         stmt.executeUpdate("CREATE TABLE person(id INTEGER, name STRING)");  
  15.         stmt.executeUpdate("INSERT INTO person VALUES(1, 'john')");  
  16.         stmt.executeUpdate("INSERT INTO person VALUES(2, 'david')");  
  17.         stmt.executeUpdate("INSERT INTO person VALUES(3, 'henry')");  
  18.         ResultSet rs = stmt.executeQuery("SELECT * FROM person");  
  19.         while (rs.next()) {  
  20.             System.out.println("id=>" + rs.getInt("id") + ", name=>" + rs.getString("name"));  
  21.         }  
  22.         stmt.close();  
  23.         conn.close();  
  24.     }  
  25. }  
執(zhí)行Test.java文件,結(jié)果如下:


這個時候,在我們的db目錄下,就生成了一個test.db的文件:



SQLite使用須知:

目前沒有可用于 SQLite 的網(wǎng)絡(luò)服務(wù)器。從應(yīng)用程序運行位于其他計算機上的 SQLite 的惟一方法是從網(wǎng)絡(luò)共享運行。這樣會導(dǎo)致一些問題,像 UNIX? 和 Windows? 網(wǎng)絡(luò)共享都存在文件鎖定問題。還有由于與訪問網(wǎng)絡(luò)共享相關(guān)的延遲而帶來的性能下降問題。

SQLite 只提供數(shù)據(jù)庫級的鎖定。

SQLite 沒有用戶帳戶概念,而是根據(jù)文件系統(tǒng)確定所有數(shù)據(jù)庫的權(quán)限。


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
iOS中幾種數(shù)據(jù)持久化方案:我要永遠地記住你!
Java與嵌入式數(shù)據(jù)庫SQLite的結(jié)合
JDBC數(shù)據(jù)庫訪問例子
利用jdbc連接sqlserver2008(打開用戶,配置遠程登錄)
使用SQLite3開發(fā)java應(yīng)用程序
SQLite3的基本使用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服