6. FONT_ENGINE 矢量字庫 7. CMMB_SUPPORT 中國移動多媒體廣播 China Mobile Multimedia Broadcasting CMMB 規(guī)定了在廣播業(yè)務(wù)頻率范圍內(nèi),移動多媒體廣播系統(tǒng)廣播信道傳輸信號的幀結(jié)構(gòu)、信道編碼和調(diào)制,該標準適用于 30MHz 到 3000MHz 頻率范圍內(nèi)的廣播業(yè)務(wù)
6. FONT_ENGINE
矢量字庫
7. CMMB_SUPPORT
中國移動多媒體廣播 China Mobile Multimedia Broadcasting CMMB規(guī)定了在廣播業(yè)務(wù)頻率范圍內(nèi),移動多媒體廣播系統(tǒng)廣播信道傳輸信號的幀結(jié)構(gòu)、信道編碼和調(diào)制,該標準適用于30MHz到3000MHz頻率范圍內(nèi)的廣播業(yè)務(wù)頻率,通過衛(wèi)星和/或地面無線發(fā)射電視、廣播、數(shù)據(jù)信息等多媒體信號的廣播系統(tǒng),可以實現(xiàn)全國漫游。
8. SQLITE3_SUPPORT
1.SQLite簡介
SQLite是實現(xiàn)了以下特征的軟件:
i.Self-Contained:SQLite最大程度的實現(xiàn)了self-contained。它實現(xiàn)了對外部程序庫以及操作系統(tǒng)的最低要求,這使得它非常適合應(yīng)用于嵌入式設(shè)備,同時,可以應(yīng)用于一些穩(wěn)定的,很少修改配置的應(yīng)用程序中。
SQLite是使用ANSI-C開發(fā)的,可以被任何的標準C編譯器來進行編譯。
SQLite與操作系統(tǒng)和存儲設(shè)備(磁盤)之間的通信是通過VFS(Virtual File System)來完成的,對于嵌入式設(shè)備來說,開發(fā)一個可用的VFS并不困難。
SQLite使用互斥來保證多線程環(huán)境下的操作安全性。
SQLite的源代碼是一個單一的C文件-sqlite3.c,如果project需要使用它,只需要包含這個C文件和對應(yīng)的頭文件(sqlite3.h)。
ii.Serverless:大多數(shù)SQL數(shù)據(jù)庫引擎都作為一個獨立的服務(wù)器進程,應(yīng)用程序通過使用一些協(xié)議,比如TCP/IP來發(fā)送請求給服務(wù)器,并接受結(jié)果,以這種方式來與數(shù)據(jù)庫服務(wù)器進行通信。SQLite與此不同,進程可以通過訪問數(shù)據(jù)庫直接進行數(shù)據(jù)庫文件的讀寫而不需要中間層的服務(wù)器進程。這樣的實現(xiàn)的主要的好處是不需要進行安裝,配置,初始化,管理以及維護單獨的服務(wù)進程。但是,數(shù)據(jù)庫引擎可以通過使用服務(wù)器來預(yù)防客戶端應(yīng)用程序的bug,確保服務(wù)器不被客戶端的錯誤所損壞。大多數(shù)SQL數(shù)據(jù)庫都是基于C/S模式的,在serverless的數(shù)據(jù)庫中,SQLite是目前唯一允許多個應(yīng)用同時訪問的。
iii.Zero-Configuration:SQLite不需要任何配置---install、setup、configure server、administration、create instance、assign permissions、recover、troubleshooting。
iv.Transactional:SQLite實現(xiàn)了ACID(Atomic-原子性,Consistent-一致性,Isolated-隔離性,Durable-持久性)。SQLite實現(xiàn)了序列化事務(wù)來保證ACID,即使發(fā)生程序異常,操作系統(tǒng)異?;蛘唠娫垂收?。
v.Most Widely Deployed SQL Database:大多數(shù)數(shù)據(jù)庫是C/S模式的,而一臺服務(wù)器可以為很多人提供服務(wù),而SQLite是嵌入式的數(shù)據(jù)庫軟件,大多數(shù)用戶會同時使用多個數(shù)據(jù)庫的拷貝。SQLite大量的被用于手機,PDA,MP3播放器以及機頂盒設(shè)備。下面列舉了一些使用SQLite作為嵌入式服務(wù)器的應(yīng)用:
Mozilla Firefox使用SQLite作為數(shù)據(jù)庫。
Mac計算機中的包含了多份SQLite的拷貝,用于不同的應(yīng)用。
PHP將SQLite作為內(nèi)置的數(shù)據(jù)庫。
Skype客戶端軟件在內(nèi)部使用SQLite。
SymbianOS(智能手機操作平臺的領(lǐng)航)內(nèi)置SQLite。
AOL郵件客戶端綁定了SQLite。
Solaris 10在啟動過程中需要使用SQLite。
McAfee殺毒軟件使用SQLite。
iPhones使用SQLite。
Symbian和Apple以外的很多手機生產(chǎn)廠商使用SQLite。
關(guān)于使用SQLite的Famous Users,請參考http://www.sqlite.org/famous.html
vi.OpenSource:SQLite處于public domain中,官方聲明如下:
Anyone is free to copy, modify, publish, use, compile, sell, or distribute the original SQLite code, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.
一些其他的特色例如執(zhí)行速度比C/S模式的數(shù)據(jù)庫引擎快、簡單易用、源代碼注釋良好、跨平臺等請參考SQLite Features列表:
http://www.sqlite.org/features.html
2.SQLite的應(yīng)用場景
SQLite具有小巧,快速和可靠的優(yōu)點是源于其簡單-管理簡單,操作簡單,嵌入簡單以及維護自定義簡單。
當(dāng)然,SQLite也有一些缺點,這取決于用戶的需求,SQLite不具有高度并發(fā)性,良好的存取權(quán)限控制,沒有內(nèi)置的函數(shù)集,不支持存儲過程以及深奧的SQL語言特性(SQLite并不完全支持SQL92),不支持XML/Java擴展,不具有tera-byte或者peta-byte的可伸縮性等等。所以,當(dāng)需要上面列舉的這些功能時,SQLite就不在適合用戶了。SQLite不是企業(yè)級的RDBMS。
下面列舉了一些應(yīng)用場景:
應(yīng)用文件格式
嵌入式設(shè)備和應(yīng)用
中小型網(wǎng)站
內(nèi)置或者臨時數(shù)據(jù)庫
命令行數(shù)據(jù)集分析工具
作為企業(yè)數(shù)據(jù)庫的替代產(chǎn)品--demo階段或者測試階段
教學(xué)
如果為了學(xué)習(xí)它,以備將來使用,或者要開發(fā)類似的應(yīng)用場景,可以使用SQLite作為數(shù)據(jù)庫軟件。
企業(yè)級的RDBMS適用于C/S應(yīng)用,高吞吐量網(wǎng)站,非常大的數(shù)據(jù)集以及高度并發(fā)的應(yīng)用。
關(guān)于SQLite區(qū)別于其他數(shù)據(jù)庫的特有屬性,請參考:http://www.sqlite.org/different.html
3.下載與使用
根據(jù)不同的平臺,可以在下載頁面:http://www.sqlite.org/download.html下載對應(yīng)的發(fā)布版本。筆者接下來將介紹SQLite在windows上的使用。多種編程語言可以通過使用wrapper或者driver來訪問SQLite,下面將介紹使用java編程語言來訪問SQLite并做一些常見的操作。
i.下載SQLite
windows版本的SQLite發(fā)布包解壓縮之后只是一個二進制的sqlite3.exe文件。
可以直接運行該程序,即可進入sqlite3控制臺(類似于mysql的控制臺),可以通過輸入.help來獲取幫助信息。.quit可以推出控制臺。控制臺的一個簡單操作如下:
//可以直接使用sqlite3 databaseName來創(chuàng)建數(shù)據(jù)庫
//SQLite不支持create database,drop database這樣的語句,drop database時直接,刪除數(shù)據(jù)庫文件即可。
1. E:/tools/sqlite>sqlite3.exe test
2. SQLite version 3.6.11
3. Enter ".help" for instructions
4. Enter SQL statements terminated with a ";"
5. sqlite> .help
6. .backup ?DB? FILE Backup DB (default "main") to FILE
7. .bail ON|OFF Stop after hitting an error. Default OFF
8. .databases List names and files of attached databases
9. //lots of other help information omitted here
10. .width NUM NUM ... Set column widths for "column" mode
11. sqlite> .databases
12. seq name file
13.
14. --- --------------- ----------------------------------------------------------
15.
16. 0 main E:/tools/sqlite/test
17.
18. sqlite> create table student(id varchar(10),name varchar(20),age smallint);
19. sqlite> select * from student;
20. sqlite> insert into student values('1001','lovesizhao',26);
21. sqlite> select * from student;
22. 1001|lovesizhao|26
23. sqlite> drop table student;
24. sqlite> .quit
這種直接在命令行提示符下面使用SQLite3的方式不是本文介紹的重點。
關(guān)于SQLite3支持的SQL語法相關(guān)內(nèi)容如下:
SQLite3關(guān)鍵字:http://www.sqlite.org/lang_keywords.html
SQLite3支持的SQL語法:http://www.sqlite.org/lang.html
SQLite3不支持的SQL語法:http://www.sqlite.org/cvstrac/wiki?p=UnsupportedSql
ii.下載Java JDBC Driver for SQLite3
在下載頁面http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers,選擇下載JDBC Driver for SQLite3。
筆者使用的是SQLiteJDBC(http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC)。
該JDBC Driver的License是Apache Software Foundation 2.0 License。
iii.使用SQLite3數(shù)據(jù)庫
筆者使用了NetBeans作為開發(fā)環(huán)境,寫了簡單的Java類,注:筆者并非要講解SQLite3的所有功能以及細節(jié)的Features,只是作為一個介紹,如果有興趣的話,請更多的參考SQLite3官方網(wǎng)站及相關(guān)資源。
NetBeans的使用不屬于本文的介紹范圍。下面介紹兩個簡單的Java類。
筆者使用的SQLiteJDBC Driver版本為3.6.11。
SQLite3Util.java
1. package sqlite3;
2. import java.sql.Statement;
3. import java.sql.Connection;
4. import java.sql.DriverManager;
5. import java.sql.ResultSet;
6. import java.sql.SQLException;
7. import java.util.logging.Level;
8. import java.util.logging.Logger;
9.
10.
11. public final class SQLite3Util {
12.
13. private final static String URL = "jdbc:sqlite:";
14. private final static String TEST = "test";
15.
16. private static Connection getConnection(String url) throws SQLException {
17. Connection conn = null;
18. try {
19. Class.forName("org.sqlite.JDBC");
20. conn = DriverManager.getConnection(url);
21.
22. } catch (ClassNotFoundException ex) {
23. Logger.getLogger(SQLite3Util.class.getName()).log(Level.SEVERE, null, ex);
24. } finally {
25. return conn;
26. }
27. }
28.
29. public static Connection getSQLite3Connection() throws SQLException {
30. return getConnection(URL + TEST);
31. }
32.
33. public static Connection getSQLite3Connection(String database) throws SQLException {
34. //Here database can be database name, database file name or memory:
35. //Connection connection = DriverManager.getConnection("jdbc:sqlite:C:/work/mydatabase.db");
36. //Connection connection = DriverManager.getConnection("jdbc:sqlite:/home/leo/work/mydatabase.db");
37. //Connection connection = DriverManager.getConnection("jdbc:sqlite::memory:");
38. return getConnection(URL + ((database == null || database.equals("")) ? TEST : database));
39. }
40.
41. public static void close(Connection conn, Statement stmt, ResultSet rs) throws SQLException {
42. if (conn != null) {
43. conn.close();
44. }
45. if (stmt != null) {
46. stmt.close();
47. }
48. if (rs != null) {
49. rs.close();
50. }
51. }
52.
53. public static void closeQuiet(Connection conn, Statement stmt, ResultSet rs) {
54. try {
55. if (conn != null) {
56. conn.close();
57. }
58. } catch (SQLException e) {
59. Logger.getLogger(SQLite3Util.class.getName()).log(Level.WARNING, null, e);
60. }
61. try {
62. if (stmt != null) {
63. stmt.close();
64. }
65. } catch (SQLException e) {
66. Logger.getLogger(SQLite3Util.class.getName()).log(Level.WARNING, null, e);
67. }
68. try {
69. if (rs != null) {
70. rs.close();
71. }
72. } catch (SQLException e) {
73. Logger.getLogger(SQLite3Util.class.getName()).log(Level.WARNING, null, e);
74. }
75. }
76. }
SQLite3Test.java
1. package sqlite3;
2.
3. import java.sql.Statement;
4. import java.sql.Connection;
5. import java.sql.DatabaseMetaData;
6. import java.sql.ResultSet;
7. import java.sql.SQLException;
8. import java.util.logging.Level;
9. import java.util.logging.Logger;
10.
11. public class SQLite3Test {
12.
13. /**
14. * @param args the command line arguments
15. */
16. public static void main(String[] args) {
17. // declare and initialize database names and java.sql objects
18. Connection conn = null;
19. Statement stmt = null;
20. ResultSet rs = null;
21. String studentDB = "D:/NetBeans/NetbeansProjects/SQLite3/student.db";
22. String inmemoryDB = ":memory:";
23.
24. // the dbmd is used to check what SQLite3JDBC driver provide for JDBC
25. DatabaseMetaData dbmd = null;
26.
27. try {
28. // get connection to default database:test
29. conn = SQLite3Util.getSQLite3Connection();
30. if (conn == null) {
31. return;
32. }
33. dbmd = conn.getMetaData();
34. // just print information to standard console instead of output file
35. System.out.println("DatabaseProductName:" + dbmd.getDatabaseProductName());
36. System.out.println("SQLKeywords:" + dbmd.getSQLKeywords());
37. System.out.println("JDBCMajorVersion:" + dbmd.getJDBCMajorVersion());
38. System.out.println("JDBCMinorVersion:" + dbmd.getJDBCMinorVersion());
39.
40. // get connection to database:D:/NetBeans/NetbeansProjects/SQLite3/student.db
41. conn = SQLite3Util.getSQLite3Connection(studentDB);
42. stmt = conn.createStatement();
43. stmt.executeUpdate("drop table if exists student.student");
44. stmt.executeUpdate("create table student(id smallint primary key, name varchar(20))");
45. stmt.executeUpdate("insert into student values(1,'zhangzhongliang')");
46. stmt.executeUpdate("insert into student values(2,'liusizhao')");
47. rs = stmt.executeQuery("select * from student");
48. int i = 1;
49. while (rs.next()) {
50. System.out.println("row no=" + i);
51. System.out.println("id=" + rs.getInt("id"));
52. System.out.println("name=" + rs.getString("name"));
53. i++;
54. }
55. stmt.executeUpdate("drop table student");
56.
57. // get connection to database in memory
58. // this will not create a database data file in your disk
59. conn = SQLite3Util.getSQLite3Connection(inmemoryDB);
60. stmt = conn.createStatement();
61. stmt.executeUpdate("drop table if exists student.student");
62. stmt.executeUpdate("create table student(id smallint primary key, name varchar(20))");
63. stmt.executeUpdate("insert into student values(1,'zhangzhongliang')");
64. stmt.executeUpdate("insert into student values(2,'liusizhao')");
65. rs = stmt.executeQuery("select * from student");
66. i = 1;
67. while (rs.next()) {
68. System.out.println("row no=" + i);
69. System.out.println("id=" + rs.getInt("id"));
70. System.out.println("name=" + rs.getString("name"));
71. i++;
72. }
73. stmt.executeUpdate("drop table student");
74. } catch (SQLException ex) {
75. Logger.getLogger(SQLite3Test.class.getName()).log(Level.SEVERE, null, ex);
76. } finally {
77. SQLite3Util.closeQuiet(conn, stmt, rs);
78. }
79. }
80. }
4.小結(jié)
本文主要介紹了SQLite3作為數(shù)據(jù)庫軟件,與其他數(shù)據(jù)庫不同的特性,優(yōu)缺點以及應(yīng)用場景的選擇。最后通過使用JDBC Driver進行了一個簡單的程序測試,介紹了如何通過JDBC來訪問SQLite數(shù)據(jù)庫。
5.參考資料
SQLite官方地址:http://sqlite.org/
SQLite文檔:http://sqlite.org/docs.html
SQLite JDBC Driver:http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC
Java JDBC:http://java.sun.com/products/jdbc/overview.html
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com