Windows 8应用程序Javascript和SQlite(数据库已锁定)
Windows 8 Application Javascript and SQlite (Database is locked)
我用javascript为windows 8 Metro UI编写了一些简单的应用程序。因为微软在Metro UI中使用Sqlite和Javascript的自然方法。我使用"doo"包装:dooWrapper SQLite(github)
我创建了一个方法:
function addSomething(name) {
var dbPath = Windows.Storage.ApplicationData.current.localFolder.path + '''a_db.sqlite';
SQLite3JS.openAsync(dbPath).then(function (db) {
return db.runAsync("INSERT INTO STH (nazwa) VALUES (:name)", { name: name }).
done(function () {
console.log('Add sth : ' + name);
db.close();
}, function (error) {
if (db) {
db.close();
}
console.log('ERROR Adding sth' + error.message);
})
});
}
我收到错误"数据库被锁定"我在文档中读到了这个错误。但我有一个问题,在不创建带有集合参数的"insert"函数的情况下添加更多行的另一种解决方案是:insert(数组)?我只想在没有这个错误的情况下使用这个函数n次。有可能吗?
是的,有可能。。。我以前也犯过这个错误。。。。为此,您只需要建立一次数据库连接。。。我已经在我的应用程序中使用了这个,它运行良好。若并没有必要关闭数据库,那个么打开数据库一次,就像。。
将此代码添加到default.js文件
var myDatabase; //Global Variable
var dbPath = Windows.Storage.ApplicationData.current.localFolder.path + '''db.sqlite';
//Create Table
SQLite3JS.openAsync(dbPath).then(function(db) {
myDatabase=db;
return db.runAsync('CREATE TABLE Item (name TEXT, price REAL, id INT PRIMARY KEY)');
});
然后你只需要使用下面的代码
// For Insert
return myDatabase.runAsync('INSERT INTO Item (name, price, id) VALUES ("'+ array[i].name+'", "48484", 1);
对于阵列
var dbPromises = [];
var testArray = [];
//only for test purpose
//You can pass your array here directly
for (var a = 0; a < 300; a++) {
var obj = {
name: "Mango"+a,
price: 100+a,
id: a
};
testArray.push(obj);
}
for (var i = 0; i < testArray.length; i++) {
var query = 'INSERT OR REPLACE INTO Item (name, price, id) VALUES ("' + testArray[i].name + '",' + testArray[i].price + ',' + testArray[i].id + ')';
dbPromises.push(globalDatabase.allAsync(query));
}
WinJS.Promise.join(dbPromises).then(function () {
debugger;
}, function(err) {
debugger;
});
以上代码仅用于较小的数组大小。。。bcz插入的时间太长了。。。对于fasst执行,您应该替换低于代码的
for (var i = 0; i < testArray.length; i++) {
var val = '("' + testArray[i].name + '",' + testArray[i].price + ',' + testArray[i].id + '),';
query = query + val;
if ((i + 1) % 300 == 0 || (i + 1) == testArray.length) {
query = query.replace(/,$/, "");
dbPromises.push(globalDatabase.allAsync(query));
query = 'INSERT OR REPLACE INTO Item (name, price, id) VALUES ';
}
}
相关文章:
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 如何通过php页面将数据库值检索到jquery自动完成框中
- 使用javascript从数据库中添加表
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- 如何使用 Angular JS 将数据保存在数据库中
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- 在谷歌地图上绘制位置数据库
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 将地理编码结果转换为php变量以发布到mysql数据库
- 从数据库中检索字段,而不模拟它们
- javascript:将数据库中的数据插入到html5文本字段中
- 从数据库中获取数据并插入JavaScript变量
- JavaScript,PHP-用JavaScript将多个数据库记录发送到变量或表
- 从MySQL数据库中获取输入数据需要两次页面刷新
- 在cordova android应用程序中连接数据库
- 根据条件检查数据库结果
- Windows 8应用程序Javascript和SQlite(数据库已锁定)
- javascript SQLITE_BUSY:数据库被锁定,sql:插入"用户”;
- 用于脚本数据库编写的锁定服务技术