国产强伦姧在线观看无码,中文字幕99久久亚洲精品,国产精品乱码在线观看,色桃花亚洲天堂视频久久,日韩精品无码观看视频免费

      您現(xiàn)在的位置:智能制造網(wǎng)>技術(shù)中心>JAVA在SQLite 嵌入式數(shù)據(jù)庫(kù)中的應(yīng)用

      直播推薦

      更多>

      企業(yè)動(dòng)態(tài)

      更多>

      推薦展會(huì)

      更多>

      JAVA在SQLite 嵌入式數(shù)據(jù)庫(kù)中的應(yīng)用

      2009年03月12日 22:15:14人氣:2181來(lái)源:浙江啟揚(yáng)智能科技有限公司

      摘  要 SQLite作為一個(gè)開(kāi)源的嵌入式數(shù)據(jù)庫(kù)產(chǎn)品,具有系統(tǒng)開(kāi)銷(xiāo)小,檢索效率高的特性,適用于手機(jī)、PDA、機(jī)頂盒設(shè)備等電器,并且作為嵌入式數(shù)據(jù)庫(kù)在可下載的消費(fèi)類(lèi)應(yīng)用程序中運(yùn)行的很好。這篇文章介紹嵌入式數(shù)據(jù)庫(kù)產(chǎn)品SQLite的技術(shù)特點(diǎn),并著重討論研究與Java語(yǔ)言之間的接口,并以實(shí)例說(shuō)明如何使用JAVA開(kāi)發(fā)基于SQLite的應(yīng)用程序。
      關(guān)鍵詞 嵌入式數(shù)據(jù)庫(kù);SQLITE; JAVA;JNI接口;JDBC驅(qū)動(dòng)程序


      1 引 言

      通常我們采用各種數(shù)據(jù)庫(kù)產(chǎn)品來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的存儲(chǔ)、檢索等功能,例如,Oracle,SQL Server,MySQL等等。這些產(chǎn)品除提供基本的查詢(xún),刪除,添加等功能外,也提供了很多特性,如觸發(fā)器,存儲(chǔ)過(guò)程,數(shù)據(jù)備份恢復(fù),全文檢索功能等。但實(shí)際上,很多的應(yīng)用,僅僅利用到了這些數(shù)據(jù)庫(kù)產(chǎn)品的基本特性而已。而且在一些小型應(yīng)用上,或者某些特殊場(chǎng)合的應(yīng)用,比如桌面程序,這些數(shù)據(jù)庫(kù)產(chǎn)品就明顯有一些臃腫。在這些情況下,嵌入式數(shù)據(jù)庫(kù)的優(yōu)勢(shì)就特別明顯了。

      嵌入式數(shù)據(jù)庫(kù)無(wú)須獨(dú)立運(yùn)行的數(shù)據(jù)庫(kù)引擎,它是由程序直接調(diào)用相應(yīng)的API去實(shí)現(xiàn)對(duì)數(shù)據(jù)的存取操作。更直白的講,嵌入式數(shù)據(jù)庫(kù)是一種具備了基本數(shù)據(jù)庫(kù)特性的數(shù)據(jù)文件。嵌入式數(shù)據(jù)庫(kù)與其它數(shù)據(jù)庫(kù)產(chǎn)品的區(qū)別是,前者是程序驅(qū)動(dòng)式, 而后者是引擎響應(yīng)式。嵌入式數(shù)據(jù)庫(kù)的一個(gè)很重要的特點(diǎn)是它們的體積非常小,編譯后的產(chǎn)品也不過(guò)幾十K。這不但對(duì)桌面程序的數(shù)據(jù)存儲(chǔ)方案是一個(gè)很好的選擇,也使得它們可以應(yīng)用到一些移動(dòng)設(shè)備上。同時(shí),很多嵌入式數(shù)據(jù)庫(kù)在性能上也優(yōu)于其它數(shù)據(jù)庫(kù),所以在高性能的應(yīng)用上也常見(jiàn)嵌入式數(shù)據(jù)庫(kù)的身影。

      下面介紹的是開(kāi)放源代碼的嵌入式數(shù)據(jù)庫(kù),SQLite。同時(shí)側(cè)重研究如何應(yīng)用Java連接SQLite數(shù)據(jù)庫(kù),并開(kāi)發(fā)基于SQLite的應(yīng)用程序。

      2 SQLite簡(jiǎn)介

         SQLite 是D ·理查德·希普開(kāi)發(fā)出來(lái)的用一個(gè)小型C 庫(kù)實(shí)現(xiàn)的一種強(qiáng)有力的嵌入式關(guān)系數(shù)據(jù)庫(kù)管理體制。它提供了對(duì)SQL92 的大多數(shù)支持: 支持多表和索引、事務(wù)、視圖、觸發(fā)和一系列的用戶(hù)接口及驅(qū)動(dòng) [1]。

      SQLite 實(shí)現(xiàn)了完備的、可嵌入的、零配置的SQL數(shù)據(jù)庫(kù)引擎。它的特點(diǎn)包括 [2]:

      1. 事務(wù)處理是原子的、一致的、獨(dú)立的和持久的(ACID),即使在系統(tǒng)崩潰和掉電以后。

      2. 零配置,即不需要設(shè)置和管理。

      3. 實(shí)現(xiàn)了絕大部分的SQL92標(biāo)準(zhǔn)。

      4. 一個(gè)單獨(dú)的磁盤(pán)文件存儲(chǔ)一個(gè)完整的數(shù)據(jù)庫(kù)。

      5. 數(shù)據(jù)庫(kù)文件在機(jī)器之間可自由共享。

      6. 支持?jǐn)?shù)據(jù)庫(kù)文件大小至2TB.

      7. 字符串和BLOG的大小只受限于可用存儲(chǔ)器容量。

      8. 代碼量小,即小于30K的C代碼行和小于250K的代碼空間(gcc 在i486上)

      9. 對(duì)于絕大多數(shù)普通操作來(lái)說(shuō),比流行的C/S 模式的數(shù)據(jù)庫(kù)引擎運(yùn)行速度快。

      10. API 簡(jiǎn)單、易用。

      可以看出,基于以上特點(diǎn),SQLite非常適合應(yīng)用于嵌入式移動(dòng)數(shù)據(jù)庫(kù)。SQLite的版權(quán)允許無(wú)任何限制的應(yīng)用,包括商業(yè)性的產(chǎn)品。SQLite*主站上可以下載到編譯后的SQLite程序。

      3 建立SQLite 數(shù)據(jù)庫(kù)

      SQLite是無(wú)數(shù)據(jù)類(lèi)型的數(shù)據(jù)庫(kù)。雖然在生成表結(jié)構(gòu)的時(shí)候,要聲明每個(gè)域的數(shù)據(jù)類(lèi)型,但SQLite并不做任何檢查。開(kāi)發(fā)人員要靠自己的程序控制輸入與讀出數(shù)據(jù)的類(lèi)型是正確的。這里有一個(gè)例外,就是當(dāng)主鍵為整型值時(shí),如果要插入一個(gè)非整型值時(shí)會(huì)產(chǎn)生異常。另外,雖然在插入或讀出數(shù)據(jù)的時(shí)候是不區(qū)分類(lèi)型的,但在比較的時(shí)候,不同數(shù)據(jù)類(lèi)型是有區(qū)別的。比如:

      CREATE TABLE MyTable(a INTEGER, b TEXT);

      INSERT INTO MyTable VALUES(0,0);

      當(dāng)執(zhí)行下面的查詢(xún):

      SELECT count(*) FROM MyTable WHERE a==''00'';

      會(huì)返回一條記錄,因?yàn)樽侄蝍的類(lèi)型是整型,而數(shù)字00與0是相等的。而執(zhí)行下面的查詢(xún)則不會(huì)返回記錄:

      SELECT count(*) FROM MyTable WHERE b==''00'';

      因?yàn)樽侄蝏是字符類(lèi)型,字符"00"與"0"是不相等的。

      SQLite提供了對(duì)Transaction的支持。應(yīng)用Transaction即保證了數(shù)據(jù)的完整性,也會(huì)提高運(yùn)行速度,因?yàn)槎鄺l語(yǔ)句一起提交給數(shù)據(jù)庫(kù)的速度會(huì)比一條一條的提交方式更快。

      SQLite庫(kù)包括一個(gè)簡(jiǎn)單的命令行工具,該工具名稱(chēng)對(duì)應(yīng)SQLite-3_2_2版本叫做sqlite3,用戶(hù)使用這個(gè)工具可以對(duì)一個(gè)SQLite數(shù)據(jù)庫(kù)手工輸入和執(zhí)行SQL命令。例如建立一個(gè)名叫wgy的SQLite數(shù)據(jù)庫(kù),并建立一個(gè)名叫user的表的步驟如下:

      Sqlite3 wgy
      SQLite version 3.2.1
      Enter ".help" for instructions
      sqlite> create table user(username varchar(10), password varchar(10));
      sqlite> into user values(''Marry'',’111111’);
      sqlite> into tbl1 values(''Helen'',’222222’);
      sqlite> * from user;
      Marry|111111

      Helen|222222

      Sqlite>

      用戶(hù)結(jié)束操作只需按CTRL+C組合鍵。注意每條SQL命令后要加分號(hào)。

      用戶(hù)可能對(duì)命令行方式的操作感到不直觀,不太容易使用。那么用戶(hù)可以使用 SQLite Database Browser 軟件 [3],這是一個(gè)免費(fèi)的、公用域的、開(kāi)源的可視化工具,可以用來(lái)建立、編輯SQLite數(shù)據(jù)庫(kù)文件。這就意味著用戶(hù)可以不必學(xué)習(xí)復(fù)雜的SQL命令,而直接使用熟悉的可視化圖形界面設(shè)計(jì)、編輯SQLite數(shù)據(jù)庫(kù)。用戶(hù)可從/ 下載該工具軟件。

      4 SQLite的第三方JAVA接口

         SQLite源代碼是C,而且*上只提供了C和Tcl語(yǔ)言的接口。為了應(yīng)用Java接口,要采用第三方的接口驅(qū)動(dòng)程序,可在http://www.ch-werner.de/javasqlite 中找到這個(gè)Java接口程序 [4]。這個(gè)接口提供了兩種連接SQLite的方式:一是直接用JNI技術(shù)調(diào)用SQLite的C語(yǔ)言接口,這種方式要求開(kāi)發(fā)人員要對(duì)SQLite本身的API也有一定的了解。在第二種方式中,接口程序?qū)崿F(xiàn)了Java標(biāo)準(zhǔn)規(guī)范的JDBC接口,這樣開(kāi)發(fā)人員只要對(duì)JDBC有了解就可以了。

      第三方接口庫(kù)中的Java代碼包含JNI接口和多個(gè)版本的JDBC接口程序,可根據(jù)你的JRE的版本選擇相應(yīng)的JDBC程序。Java類(lèi)包加上Sqlite_jni.dll文件,組成了SQLite的Java接口庫(kù),在應(yīng)用Java語(yǔ)言調(diào)用JDBC或JNI接口時(shí),都是通過(guò)應(yīng)用Java的本地化技術(shù)調(diào)用Sqlite_jni.dll文件,完成對(duì)SQLite數(shù)據(jù)庫(kù)的操作。

      4.1應(yīng)用JNI直接調(diào)用SQLite功能

          下面這段代碼演示如何應(yīng)用JNI接口操作SQLite??梢钥吹紻atabase類(lèi)的exec()方法是執(zhí)行SQL語(yǔ)句的關(guān)鍵:

         Database db = new Database();

      try {

               //打開(kāi)數(shù)據(jù)庫(kù)

               db.open("c:tempmydata.slt", 0666);

               db.interrupt();

               db.busy_timeout(1000);

               db.busy_handler(null);

               db.exec("create table account (name varchar(10),gale boolean)"

      ,result);

               db.exec("into account values(''steve'',''m'')", result);

               db.exec("* from account",result);

      //關(guān)閉數(shù)據(jù)庫(kù)

               db.close();

      } catch (Exception e) {

               e.printStackTrace();

      }

      4.2 應(yīng)用JDBC連接SQLite

      用戶(hù)一定要保證在類(lèi)路徑class_path中有“sqlite.jar”,并且保證在你的JAVA庫(kù)路徑JAVA library path 中有本地庫(kù)native library。用"SQLite.JDBCDriver"作為JDBC的驅(qū)動(dòng)程序類(lèi)名。連接JDBC的URL格式為jdbc:sqlite:/path。這里的path為到SQLite數(shù)據(jù)庫(kù)文件的路徑,例如:

      jdbc:sqlite://dirA/dirB/dbfile迎訪問(wèn)無(wú)由電子開(kāi)發(fā)網(wǎng)(技術(shù)文章 在線閱讀 在線商城

      jdbc:sqlite://DRIVE:/dirA/dirB/dbfile

      jdbc:sqlite://COMPUTERNAME/shareA/dirB/dbfile

      參考下面的應(yīng)用JDBC連接SQLite的例程:

      //聲明JDBC驅(qū)動(dòng)程序

      Class clz = Class.forName("SQLite.JDBCDriver");

      //連接數(shù)據(jù)庫(kù)

      Connection conn = DriverManager.getConnection("jdbc:sqlite:/c:/temp/e2.db");

      Statement stmt = conn.createStatement();

      //生成person表,包含名子和年齡字段

      stmt.execute("create table person (name varchar(100),age int)");

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

      stmt.execute("into person values(''steve'',25)");

      //用SQL語(yǔ)句讀出數(shù)據(jù)

      result = stmt.executeQuery("* from person");

      while(result.next()){

               System.out.println(result.getString(1));

               System.out.println(result.getInt(2));

      }  

      運(yùn)行程序時(shí)要在Java.exe命令行加入選項(xiàng)java.library.path到Sqlite_jni.dll所在的路徑。例如,如果Sqlite_jni.dll放在c:\sqliteNative 路徑下面,運(yùn)行類(lèi)com.wangguanyu.MyClass 的命令行將會(huì)是這樣:java -Djava.library.path=c:\sqliteNative com.wangguanyu.MyClass。

      5結(jié)束語(yǔ)

      SQLite已于2005年6月13日發(fā)布了Version 3.2.2, 該版本不僅修正了許多的BUG,而且訪問(wèn)速度更快,產(chǎn)生的代碼量更少。而JAVA程序又具有簡(jiǎn)單易學(xué)、面向?qū)ο?、平臺(tái)無(wú)關(guān)性、穩(wěn)定安全等特點(diǎn)。兩者結(jié)合起來(lái)開(kāi)發(fā)的應(yīng)用程序必然兼具兩方面的優(yōu)勢(shì)。SOC開(kāi)發(fā)平臺(tái)360元 單片機(jī)開(kāi)發(fā)系統(tǒng)498元 單片機(jī)學(xué)習(xí)板138 無(wú)線nRF-9E5模塊100元 51單片機(jī)試驗(yàn)開(kāi)發(fā)板238元 Genius NSP通用編程器260元 Mini ARM Debugger330元 LABTOOL-48UXP2800元 S3C2410 ARM9開(kāi)發(fā)板800

      參    考    文    獻(xiàn)

      [1]  黃布毅  張曉華 基于ARM2Linux 的SQLite 嵌入式數(shù)據(jù)庫(kù)技術(shù)[J] 單片機(jī)與嵌入式系統(tǒng)應(yīng)用 2005-4: 22

      [2]   / [ EB/ OL ]

      [3]   / [ EB/ OL ]

      [4]   http://www.ch-werner.de/javasqlite  [ EB/ OL ]
       

      全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

      免責(zé)聲明

      • 凡本網(wǎng)注明"來(lái)源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請(qǐng)必須注明智能制造網(wǎng),http://towegas.com。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
      • 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
      • 本網(wǎng)轉(zhuǎn)載并注明自其它來(lái)源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品來(lái)源,并自負(fù)版權(quán)等法律責(zé)任。
      • 如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

      <
      更多 >

      工控網(wǎng)機(jī)器人儀器儀表物聯(lián)網(wǎng)3D打印工業(yè)軟件金屬加工機(jī)械包裝機(jī)械印刷機(jī)械農(nóng)業(yè)機(jī)械食品加工設(shè)備制藥設(shè)備倉(cāng)儲(chǔ)物流環(huán)保設(shè)備造紙機(jī)械工程機(jī)械紡織機(jī)械化工設(shè)備電子加工設(shè)備水泥設(shè)備海洋水利裝備礦冶設(shè)備新能源設(shè)備服裝機(jī)械印染機(jī)械制鞋機(jī)械玻璃機(jī)械陶瓷設(shè)備橡塑設(shè)備船舶設(shè)備電子元器件電氣設(shè)備


      我要投稿
      • 投稿請(qǐng)發(fā)送郵件至:(郵件標(biāo)題請(qǐng)備注“投稿”)1271141964.qq.com
      • 聯(lián)系電話0571-89719789
      工業(yè)4.0時(shí)代智能制造領(lǐng)域“互聯(lián)網(wǎng)+”服務(wù)平臺(tái)
      智能制造網(wǎng)APP

      功能豐富 實(shí)時(shí)交流

      智能制造網(wǎng)小程序

      訂閱獲取更多服務(wù)

      微信公眾號(hào)

      關(guān)注我們

      抖音

      智能制造網(wǎng)

      抖音號(hào):gkzhan

      打開(kāi)抖音 搜索頁(yè)掃一掃

      視頻號(hào)

      智能制造網(wǎng)

      公眾號(hào):智能制造網(wǎng)

      打開(kāi)微信掃碼關(guān)注視頻號(hào)

      快手

      智能制造網(wǎng)

      快手ID:gkzhan2006

      打開(kāi)快手 掃一掃關(guān)注
      意見(jiàn)反饋
      關(guān)閉
      企業(yè)未開(kāi)通此功能
      詳詢(xún)客服 : 0571-87858618