2

我正在为 Safari 制作一个数据库应用程序。因此,我正在遵循 Apple 制作的本指南:Link

到目前为止,我已经制作了这个“类”原型。它可以工作,但它不断复制数据库(它们只是在 Safari Inspector 工具中不断堆积)(我没有从 1.0 更改版本):

function Database() {
    this.DB = null;
    this.shortName = 'gamedb';
    this.version = '1.0';
    this.displayName = 'Database';
    this.maxSize = 5 * 1024 * 1024;

    init: (function() {

    })

    this.initDB = function() {
        try {
            if (!window.openDatabase) {
                alert('Error: Databases are not supported.');
            }
            else {
                this.DB = openDatabase(this.shortName, this.version, this.displayName, this.maxSize);
            }

            return true;
        }
        catch(e) {
            if (e == 2) {
                // Version number mismatch.
                console.log("Error: Invalid database version.");
            }
            else {
                console.log("Error: Unknown, " + e + ".");
            }

            return;
        }
    }

    this.query = function(query) {
        if (query == undefined) {
            query = '';
        }

        query = query + ';'; // Add the ending semi-colon

        this.DB.transaction(
            function (transaction) {
                transaction.executeSql(
                    query,
                    [],
                    this.nullDataHandler,
                    this.errorHandler
                );
            }
        );
    }

    this.nullDataHandler = function() {
        return 0;
    }

    this.errorHandler = function(error) {
        return 0;
    }

}

这是我的 main.js 文件,其中包含我的 jQuery 句柄和数据库原型的实例化:

$(document).ready(function() {
    var DB = new Database();
    DB.initDB();
    DB.query('CREATE TABLE IF NOT EXISTS users(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)');
    DB.query('INSERT INTO users(name) VALUES ("Jackson")');
});

即使只是空白地运行这一行也会产生重复:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>X</title>
    <style>
        html, body {
            background: #202020;
            color: #8d9d6a;
        }
    </style>
    <script type="text/javascript">
        var shortName = 'mydatabase';
        var version = '1.0';
        var displayName = 'My Important Database';
        var maxSize = 65536; // in bytes
        var db = openDatabase(shortName, version, displayName, maxSize);
    </script>
</head>
<body>
    Content
</body>
</html>

笔记:

  • 我关闭了扩展程序

  • 开发者菜单没有变化(没有被禁用或阻止)

4

2 回答 2

0

我在 chrome 和 safari 中都遇到了这个问题。当我保存一条记录时,它会出现多次,并且检查器会显示 webSQL db 的重复项(50 个或更多!)。对我来说,事实证明我在保存后不久就调用了 SELECT 以更新视图。我将它移到了成功函数中,从而解决了问题。我只能认为浏览器会感到困惑并在检查器中生成多个数据库。这可能不是同一个问题,但它似乎足够接近提及。

于 2013-08-22T01:40:04.007 回答
0

对于像我这样新手的任何人的辅助信息。

我有一个从多个表中选择的查询,导致我的显示重复。愚蠢的问题,通过明显选择单个表来简单解决

var showLearnerSQL = "SELECT * FROM tblLearnerInfo, tblDrive";// Not a great idea
var showLearnerSQL = "SELECT * FROM tblLearnerInfo; // Great idea 
于 2016-09-10T15:06:29.470 回答