javascript - 无法使用查询从 Sqlite 数据库获取值

标签 javascript html sqlite

我使用 sqlite 填充了一个数据库,其中包含一些表。 我在另一个执行数据库的javascript页面上创建了一个函数并从表中选择了一些值。该函数在 $(document).ready() 处被调用。

Javascript:

 //DB Population
function onDeviceReady() {
    var db = window.openDatabase("Database", "1.0", "SqliteTrial", 20000);
    db.transaction(populateDB, errorCB, successCB);
}

function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS Subjects');
tx.executeSql('CREATE TABLE IF NOT EXISTS Subjects (id unique, subjectname)');
tx.executeSql('INSERT INTO Subjects (id, subjectname) VALUES (1, "Math")');
tx.executeSql('INSERT INTO Subjects (id, subjectname) VALUES (2, "Science")');
}  

function GetSubjectsFromDB()
{
    console.log("");
    tx.executeSql('SELECT * FROM Subjects', [], queryNSuccess, errorCB);
}

function queryNSuccess(tx, results) {
    alert("Query Success");
    console.log("Returned rows = " + results.rows.length);
    if (!results.rowsAffected) {
        console.log('No rows affected!');
        return false;
    }
    console.log("Last inserted row ID = " + results.insertId);
}

function errorCB(err) {
    alert("Error processing SQL: "+err.code);
}

这条线路有问题吗?

tx.executeSql('SELECT * FROM Subjects', [], queryNSuccess, errorCB);

没有调用 queryNSuccess,也没有调用 errorCB,所以我不知道出了什么问题。

这是我在另一个页面上的调用方式:

Javascript:

     $(document).ready(function () {
            DisplayData();
            GetSubjectsFromDB(tx);
        });

最佳答案

不,它不是那样工作的。 tx 变量实际上是一个参数,将被db.transaction 方法发送到指定的回调函数中。所以你可能想改为这样做:

$(document).ready(function () {
    ...
    db.transaction(GetSubjectsFromDB);            
});

... 并将此函数定义重写为...

function GetSubjectsFromDB(tx) { ... something to do with tx ... }

但在我看来,实际上还有另一个问题。存储连接句柄(由 window.openDatabase 调用创建)的 db 变量是 onDeviceReady 函数的本地变量 - 换句话说,它不是在此函数之外可见。

解决此问题的最简单方法是在全局上下文中定义此变量:

var dbh; // the SQLite connection handle
function onDeviceReady() { ... dbh = window.openDatabase ... }
function GetSubjects() { ... dbh.transaction(getSubjectsFromDb) ... }
function getSubjectsFromDb(tx) { ... tx.executeSql(...) ... }

这是一个很棒的presentation描述 WebSQL DB 的一般用法。但我还想补充一点,WebSQL DB API 被认为已弃用;建议改用 IndexedDB。这是 something阅读它。

关于javascript - 无法使用查询从 Sqlite 数据库获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11376126/

相关文章:

Javascript 类型错误 : document. getElementById(...) 为空

sqlite - 如何修复 "Error: This QuadStore is not registered"?

ios - 应用因数据存储而被拒绝

javascript - React setState 不改变特定属性的状态

javascript - WebRTC - 找出 MediaStreamTrack 类型?

javascript - 图片页面过渡

html - 如何为文章创建列表样式

c# - 如何在 MVC 中使用 GET 方法进行搜索

objective-c - sqlite ios线程访问

Javascript:String.Replace