簡體   English   中英

Cordova 3.5.0上的SQLite插件不起作用

[英]SQLite Plugin on cordova 3.5.0 is not working

我是Cordova Android開發的新手,這是我對Stack Overflow的第一篇文章。 我正在嘗試使用預填充的SQlite數據庫中的數據作為listview項目名稱來創建Android Listview,當單擊這些listview項目時,將使用來自相同SQLite數據庫的數據並提供詳細信息來打開一個新頁面。 (例如,“第1頁”將具有一個列表視圖,該列表視圖是使用預先填充的SQlite數據庫中的數據動態創建的,當單擊一個列表視圖項時,將打開一個新頁面“第2頁”,其中相關數據存儲在同一數據庫中,例如分支機構名稱在“頁面1”和“頁面2”中的分支詳細信息)。 我已經從Git Hub安裝了Sqlite插件,但還沒有運氣。 有人可以幫我解決這個問題嗎? 任何查詢將不勝感激。

提前致謝。

注意:我正在使用帶有Eclipse的Cordova 3.5.0 CLI和Eclipse進行開發,並使用Android 4.1.2 Jelly Bean Mobile(不是仿真器,而是真正的手機)進行測試,我的代碼如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<script src="js/jquery-1.11.1.js"></script>

<script src="js/jquery.mobile-1.4.2.js"></script>

<script src="js/jquery.mobile-1.4.2.min.js"></script>

<link rel="stylesheet" href="css/themes/jquery.mobile.icons.min.css" />

<link rel="stylesheet" href="css/themes/shiplu.css.min.css" />

<link rel="stylesheet" href="css/list.css" />

<link rel="stylesheet" href="css/jquery.mobile-1.4.2.css">

<script type="text/javascript" charset="utf-8">

document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {

var db = window.sqlitePlugin.openDatabase({name: "gmapdata"});

 db.transaction(populateDB, errorCB, successCB);
}
// create table

function populateDB(tx) {
 tx.executeSql('DROP TABLE IF EXISTS markers');
 tx.executeSql('CREATE TABLE IF NOT EXISTS markers (id INT PRIMARY KEY  NOT NULL , name VARCHAR( 60 ) NOT NULL, address     VARCHAR( 80 ) NOT NULL , lat FLOAT( 10, 8 ) NOT NULL , lng FLOAT( 10, 8 ) NOT NULL , status VARCHAR, num VARCHAR DEFAULT (null) , zone VARCHAR, district VARCHAR)');
 tx.executeSql('INSERT INTO markers VALUES (?,?,?,?,?,?,?,?,?)', [2,'Motijheel Branch (AD)','161 Motijheel Commercial Area,  \n Dhaka- 1000 \n Ph: 9569350 (D) 7125266, 9564190, 01715028067 \n Fax: 9567664 ',23.722222,90.42171,'',NULL,'Corporate','Dhaka']);
 queryDB(tx);
}

// form the query
function queryDB(tx) {
tx.executeSql("SELECT name, address, district, zone from markers;", [], querySuccess, errorCB);
}
// Display the results
function querySuccess(tx, results) {
var len = results.rows.length;
//alert("results.rows.length: " + results.rows.length + " [should be 2]");

if(len>0)
{

document.write("<ul data-role='listview'>");

for (var i = 0; i < len; i++) { // loop as many times as there are row results

document.getElementById("output").innerHTML +=
    "<li><a href='#'>"+ results.rows.item(i).name +"</a></li>";
}
document.write("</ul>");
}
// Transaction error callback
function errorCB(err) {
console.log("Error processing SQL: " + err.code);
}
// Success error callback
function successCB() {
}
</script>

</head>

<body>

<script type="text/javascript" src="cordova.js"></script>


<div data-role="page" data-theme="f" id="br_list">


<div role="banner" class="ui-bar-a ui-header" data-role="header">
            <a data-theme="F" href="index.html" class="ui-btn-left ui-btn ui-btn-icon-left ui-btn-corner-all ui-shadow ui-btn-up-a" data-icon="arrow-l"><span class="ui-btn-inner ui-btn-corner-all"><span class="ui-btn-text">Back</span><span class="ui-icon ui-icon-arrow-l ui-icon-shadow"></span></span></a>
            <h1 aria-level="1" role="heading" tabindex="0" class="ui-title">Branch List</h1>
</div>


<div class="segment">

    <div id="output" align ="center"><img src="img/loading.gif"></div>

</div>

<div data-role="footer" >
                <h4>********</h4>
</div><!-- /footer -->

</div>

</body>

</html>

您在使用任何Javascript編輯器進行工作嗎? 您需要為日食下載一個好的JS編輯器,該編輯器會突出顯示代碼中的任何語法錯誤。 如果您有任何語法錯誤,那么您的真實設備將不會顯示任何消息,並且會以靜默方式失敗。

我建議您從應用程序中刪除所有jquery代碼 ,然后僅測試cordova功能。 一旦Cordova數據庫功能正常運行,您就可以添加jquery代碼。

您是否已將SQLite插件添加到項目中。 如果還沒有,那么代碼中的以下行將不起作用。

var db = window.sqlitePlugin.openDatabase({name: "gmapdata"});

您需要改為使用cordova核心數據庫API。 請參考Cordova鏈接,以獲取參考https://cordova.apache.org/docs/en/3.0.0/cordova_storage_storage.md.html
下面的示例代碼。

var db = window.openDatabase("test", "1.0", "Test DB", 1000000);

同樣,當您在Real設備或仿真器上進行測試時。 您需要確保在每次測試應用程序時都卸載應用程序。
您可以改為使用alert()調用,如下所示。

// Transaction error callback
function errorCB(err) {
alert("Error processing SQL: " + err.code);
}
// Success error callback
function successCB() {
    alert("successCB() called");
}

您還可以在上一次插入調用中添加queryDB() ,如下所示。
還要注意,我已經將errorCB()添加到insert調用中,可以很好地警告任何錯誤。

tx.executeSql('INSERT INTO markers VALUES (?,?,?,?,?,?,?,?,?)', 
[2,'Motijheel Branch (AD)','161 Motijheel Commercial Area,  \n Dhaka- 1000 \n Ph: 9569350 (D) 7125266, 9564190, 01715028067 \n Fax: 9567664 ',23.722222,90.42171,'',NULL,
'Corporate','Dhaka'],queryDB,errorCB);
//queryDB(tx);

將queryDB的定義更改為

function queryDB(tx, results) {...}

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM