1

我正在尝试实现一个 REST 环境,在该环境中,在客户端,客户端数据存储在 SQLite 数据库中。

我之前在 Cordova 上使用Cordova-sqlite-storage完成了这一点,但我无法使用它的 vanilla-JS 对应物sql.js完成同样的任务

我遇到的问题是该Database()函数没有返回任何内容,所以我无法进行任何类型的查询。

这是我的测试文件(test.html):

<html>
    <head>
        <script src="https://rawgit.com/kripken/sql.js/master/js/sql.js"></script>
    </head>
    <body>
        <script>
            var sql             = window.SQL;
            var db              = sql.Database(); // Is returning undefined ?
            
            sqlstr = "CREATE TABLE hello (a int, b char);";
            sqlstr += "INSERT INTO hello VALUES (0, 'hello');"
            sqlstr += "INSERT INTO hello VALUES (1, 'world');"
            db.run(sqlstr); // Run the query without returning anything

            var res = db.exec("SELECT * FROM hello");

            console.log(res);
        </script>
    </body>
</html>

这将返回以下错误:

TypeError: this.handleError is not a function
sql.js
Line 466

如果我this.handleError()自己创建,错误将变为:

TypeError: db is undefined
test.html
第 13 行

关于如何解决这个问题的任何想法?我到处看了看,但文档似乎很少。

4

1 回答 1

5

sql.Database()需要作为构造函数调用(例如 db = new sql.Database();)。注意new, 如用法示例中所示。

var sql = window.SQL;
var db = new sql.Database();

sqlstr = "CREATE TABLE hello (a int, b char);";
sqlstr += "INSERT INTO hello VALUES (0, 'hello');"
sqlstr += "INSERT INTO hello VALUES (1, 'world');"
db.run(sqlstr);

var res = db.exec("SELECT * FROM hello");

console.log(res);
<script src="https://rawgit.com/kripken/sql.js/master/js/sql.js" type="text/javascript"></script>

于 2015-12-08T14:54:49.303 回答