cordova調用本地SQLite資料庫的方法

來源:互聯網
上載者:User

標籤:

第一篇技術部落格,寫下來和大家分享今天所學,其次自己也鞏固一下。  

  整個下午的時間用來鑽研如何用cordova調用移動端本地SQLite資料庫。首先我並不是用eclipse來編程的,而是用cordova建立project後直接用notepad編輯www下的index檔案。

 

一、cordova的下載安裝和建立project的方法

該部分不是文章重點,抽空另開一篇文章詳細介紹。官網上有相關教程:http://cordova.apache.org/docs/en/5.0.0/guide_cli_index.md.html#The%20Command-Line%20Interface(插一句,測試時盡量用真機,虛擬機器實在太慢)

 

二、外掛程式下載

調用SQLite需要使用cordova的外掛程式cordova-sqlite-storage,下載方法為在所建的project目錄下開啟cmd,輸入cordova plugin add cordova-sqlite-storage斷行符號。

 

三、外掛程式的使用

參考資源:https://www.npmjs.com/package/cordova-sqlite-storage

使用sqlite資料庫的基本步驟

(1)建立串連

   有兩種方法可用來建立並開啟對資料庫的一個串連:

  • var db = window.sqlitePlugin.openDatabase({name: "my.db"});  //my.db表示資料庫名稱
  • var db = window.sqlitePlugin.openDatabase("myDatabase.db", "1.0", "Demo", -1); //myDatabase.db代表資料庫名稱,1.0是版本號碼,Demo是描述資訊,第四個參數參考其他資料應該是預估資料庫大小,-1代表什麼自己也沒搞懂,請大神指點。

(2)執行SQL操作

   使用db.transaction()方法來執行一個SQL操作,該方法只有一個參數。該參數是一個函數,並且通常是匿名的,可以直接定義在db.transaction()中。如:

db.transaction(function(tx)

{

...

});

  這個匿名函數具有一個事務類型的參數tx,它是一個事務對象,該事物對象具有一個方法:executeSql(),使用該方法可以執行SQL語句。

  該方法有四個參數,其中後三個參數是可選的:

  • 查詢字串
  • 替換參數化查詢中的預留位置的資料
  • SQL執行成功時調用的回呼函數
  • SQL執行失敗時調用的回呼函數

例如下面的代碼,同時定義了四個參數:

tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function1,function2);

(3)對結果進行處理

  3.1 當SQL操作執行成功時回執行一個回呼函數,即上文中的funciton1,該函數有兩個參數,一個是執行他的事物對象tx,另一個是操作返回的結果res(下面會詳細介紹),即:

function function1(tx,res)

{

...

}

  3.2當SQL操作失敗時就會調用function2,該函數也有兩個參數,一個是tx,另一個是錯誤對象,通過該錯誤對象可以獲知具體的錯誤資訊:

function function2(tx,err)

{

alert(err.message);

}

  3.3 成功使用executeSql()方法執行的SQL語句可以返回一個執行結果即上文中的res,該執行結果回作為回呼函數的一個參數。

執行結果是一個SQLResultSet對象,由SQLResultSet介面定義:

interface SQLResultSet{

  readonly attribute long insertId;

  readonly attribute long rowsAffected;

  readonly attribute SQLResultRowList rows;

};

  1、屬性insertId返回記錄行的行ID,每個SQL INSERT插入操作會自動插入一個行ID,如果插入多行,則該屬性返回最後一行的行ID;如果不存在記錄行則調用該屬性時拋出INVALID_ACCESS_ERR異常。

  2、屬性rowsAffect返回SQL語句所改變的記錄行的行數,如果沒有任何改變,則該屬性返回0;

  3、屬性rows 返回一個SQLResultList 對象,表示返回的所用記錄行,結果按照資料庫中的序列排列,如果沒有資料,則返回Null 物件,即SQLResultList.length屬相值為0;

SQLResultList對象由SQLResultList 介面定義:

interface SQLResultSetRowList{

  readonly attribute unsigned long length;

  getter any item(in unsigned long index);

};

  1、屬性length表示返回記錄行的總行數。

  2、item(x)方法根據索引號x擷取一個指定的行(下標從0開始)。如果不存在指定的索引號,則該方法返回null。

  一行就是一個javascript Object類型的對象,每個記錄行的屬性名稱相當於對象的屬性名稱,例如row={id:0,data:“test”,data_num:100},使用對象文法可以擷取每個屬性的值,如row[data]。

 

整體代碼如下:

在手機上顯示結果為:

data_num=100

data=test

id=0

 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <script src="cordova.js" type="text/javascript"></script> 6 <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css"> 7 <script src="http://code.jquery.com/jquery-1.10.2.js"></script> 8 <script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js"></script> 9   <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css">10   <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.css">11   <script src="http://code.jquery.com/mobile/1.3.2/jquery.mobile-1.3.2.min.js"></script>12 </head>13 <body>14 <script>15 document.addEventListener("deviceready", onDeviceReady, false);16 17 function onDeviceReady() {18   var db = window.sqlitePlugin.openDatabase("Database", "1.0", "Demo", -1);19  20   db.transaction(function(tx) {21     tx.executeSql(‘DROP TABLE IF EXISTS test_table‘);22     tx.executeSql(‘CREATE TABLE IF NOT EXISTS test_table (id integer primary key, data text, data_num integer)‘);23  24     tx.executeSql("INSERT INTO test_table (data, data_num) VALUES (?,?)", ["test", 100], function(tx, res) {25       tx.executeSql("select * from test_table;", [], function(tx, res) {26         alert("hello world");27         var row=res.rows.item(0);28         for(var j in row){29          document.write(j+"="+row[j]+"<br />");30         }31       });32     }, function(e) {33       alert("ERROR: " + e.message);34     });35   });36 }37 </script>38 </body>39 </html>

 

cordova調用本地SQLite資料庫的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.