HTML5WebSQL不断复制和破坏旧数据库
我正在为Safari制作一个数据库应用程序。所以我遵循苹果公司制作的指南: 到目前为止,我已经制作了这个类的原型。它可以工作,但它会不断复制数据库,它们只是不断地堆积在Safari Inspector工具中,而无需我从1.0更改版本:HTML5WebSQL不断复制和破坏旧数据库,html,safari,webkit,web-sql,Html,Safari,Webkit,Web Sql,我正在为Safari制作一个数据库应用程序。所以我遵循苹果公司制作的指南: 到目前为止,我已经制作了这个类的原型。它可以工作,但它会不断复制数据库,它们只是不断地堆积在Safari Inspector工具中,而无需我从1.0更改版本: function Database() { this.DB = null; this.shortName = 'gamedb'; this.version = '1.0'; this.displayName = 'Database'
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>
注:
我关掉了分机
“开发人员”菜单中无任何更改未禁用或阻止任何内容
我在chrome和safari中都遇到了这个问题。当我保存一条记录时,它会出现好几次,并且检查器会显示webSQL db 50或更多!的副本!。对我来说,结果是我在保存后很快调用了SELECT来更新视图。我把它移到了一个成功函数中,解决了这个问题。我只能认为浏览器会变得混乱,并在inspector中生成多个DBs。这可能不是同一个问题,但它似乎很接近,值得一提 我在chrome和safari中都遇到了这个问题。当我保存一条记录时,它会出现好几次,并且检查器会显示webSQL db 50或更多!的副本!。对我来说,结果是我在保存后很快调用了SELECT来更新视图。我把它移到了一个成功函数中,解决了这个问题。我只能认为浏览器会变得混乱,并在inspector中生成多个DBs。这可能不是同一个问题,但它似乎很接近,值得一提 对于像我这样的新手来说都是次要信息 我有一个从多个表中选择的查询,这导致我的显示重复。愚蠢的问题,简单的修复显然是选择一个表
var showLearnerSQL = "SELECT * FROM tblLearnerInfo, tblDrive";// Not a great idea
var showLearnerSQL = "SELECT * FROM tblLearnerInfo; // Great idea
对于像我这样的新手来说,这是个补充信息 我有一个从多个表中选择的查询,这导致我的显示重复。愚蠢的问题,简单的修复显然是选择一个表
var showLearnerSQL = "SELECT * FROM tblLearnerInfo, tblDrive";// Not a great idea
var showLearnerSQL = "SELECT * FROM tblLearnerInfo; // Great idea
你知道发生了什么吗?遗憾的是没有。我实际上放弃了整个WebSQL概念,转而使用服务器端脚本的AJAX调用和/或完全在其上运行而不依赖浏览器支持的第三方库。你知道发生了什么吗?遗憾的是,没有。实际上,我放弃了整个WebSQL概念,转而使用带有服务器端脚本的AJAX调用和/或完全在其上运行而不依赖浏览器支持的第三方库。