我是构建一个相当复杂的
HTML5 Web应用程序的一部分,该应用程序从Web服务检索其数据以填充Web sql数据库.
一切都与测试数据相符,然后我尝试使用一些真实的数据(一个大约10列和超过180,000行的表)并遇到了一些问题.
我在500个插入的“块”中发送sql响应,然后运行事务并从Web服务获取下一个响应.这工作正常,直到表达到大约9000行,然后它就不再需要了.此时数据库文件大小仍然低于2MB,我的最大大小设置为20MB,所以我不认为这是问题.
我设法用更简单的代码重新创建类似的问题,所以其他人可以看到我在说什么. (出于某种原因,我不能把它全部留在“代码块”(对不起))
//var qsParm = new Array();
var bigData = {};
bigData.webdb = {};
var readOnly = false;
bigData.webdb.open = function() {
bigData.webdb.db = null;
var dbSize = 20 * 1024 * 1024; // 20MB
infinity.webdb.db = openDatabase('bigData','','bigData DATA',dbSize);
};
bigData.webdb.onError = function(tx,e) {
alert('Something unexpected happened: ' + e.message);
};
bigData.webdb.createTable = function() {
var db = bigData.webdb.db;
db.transaction(function(tx) {
tx.executesql("CREATE TABLE IF NOT EXISTS [MattTest] ([Foo] VARCHAR(32) PRIMARY KEY ASC,[Bar] VARCHAR(20),[Will] VARCHAR(100),[Smith] VARCHAR(100))",[]);
});
db.transaction(function(tx) {
var i=0;
for(i=0; i<19000; i++)
tx.executesql("INSERT INTO [MattTest] (Foo,Bar,Will,Smith) VALUES (?,?,?)",['Foo' + i,'Bar','Now this is the story all about how My life got flipped turned upside down','And Id like to take a minute just sit right there Ill tell you how I became the prince of a town called Bel Air']);
}
});
};
请忽略字符串值,它只是填充varchar大小(sqlite似乎不填充char类型).
在上面的“19000”次迭代(或下面的任意数字)中,将在Chrome中创建表格,并正确输入所有数据.数据库大约4MB. Safari会让我添加更多行,我在Safari中的数据库大小可达10MB左右.
如果我尝试删除表格的内容并将迭代次数增加到20,000,则Chrome无法完成交易.
有没有人对可能导致这种情况的原因有任何想法?
我希望我已经详细解释了这个问题.如果我太模糊,请随时提出任何问题.
谢谢你的帮助.
更新:我尝试添加一些错误处理,响应是“约束失败”.我对可能导致这种情况的原因做了一些研究,但我仍在努力寻找答案.