我不知道为什么会这样。我在我的应用程序中使用Sqlite插件。它工作正常。我能够从DB存储和检索数据。但问题是当我试图在主页上检索数据时(即应用程序起始页面)我收到以下错误,
但如果我在我的应用程序的第二页中使用相同的代码,它工作正常。那么如何填充数据库值应用程序起始页。
代码,
$( document ).ready(function() {
redirectHomePage();
});
function redirectHomePage()
{
alert("go to home page");
var db = window.sqlitePlugin.openDatabase({name: "test.db"});
db.transaction(function (tx) {
tx.executeSql("select distinct Category from Locationlog;", [], function (tx, res) {
$("#select-choice").empty();
var optionheading = '<option value="Select Category">Select Category</option>';
$("#select-choice").append(optionheading);
alert("length: "+ res.rows.length);
for (var i = 0; i < res.rows.length; i++)
{
var opt = '<option value="';
opt += res.rows.item(i).Category;
opt += '">';
opt += res.rows.item(i).Category;
opt += '</option>';
$("#select-choice").append(opt).selectmenu('refresh');
$("#locationList").empty();
}
});
});
$.mobile.changePage('#homePage', "slide", false, true);
}
我的应用程序主页ID是&#34;主页&#34;。我正在使用cordova-3.5在android平台上工作。有关如何在加载第一页之前填充数据库的任何建议。我试过&#34; pageshow&#34;我得到了同样的错误。还有其他方法吗?
答案 0 :(得分:3)
如果您的项目中未包含 sqlite插件,则代码中的语句将失败。
var db = window.sqlitePlugin.openDatabase({name: "test.db"});
此外,在使用cordova插件之前,您应该等待deviceready事件被解雇
您可以使用 window.openDatabase()调用来创建sqlite DB并且不需要sqlite插件。
以下是在您的app中使用openDatabase调用的代码。
如果您的sqlite插件工作正常,则将db调用更改为。
var db = window.sqlitePlugin.openDatabase({name: "test.db"});
不使用sqlite插件的代码。
// Wait for device API libraries to load
//
document.addEventListener("deviceready", onDeviceReady, false);
// device APIs are available
//
function onDeviceReady() {
var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);
}
// Populate the database
//
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS DEMO');
tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}
// Transaction error callback
//
function errorCB(err) {
alert("Error processing SQL: "+err);
}
// Transaction success callback
//
function successCB() {
alert("success!");
}
以上代码段取自Cordova API文档。有关详细信息,请参阅here。即使文档是3.0,它应该适用于3.5