[英]how to connect Web sql in node-webkit app?
目前正在使用node-webkit創建應用程序。我可以在chrome瀏覽器中看到本地數據庫。但是我想從mozilla sqllite add on連接數據庫。這是可能的。以前數據庫是在我的應用程序的用戶目錄中創建的我還有一個疑問。 對於每個登錄名,清空的數據庫也不起作用。
在SQLite管理器中,您可以“導出數據庫”。 這將為您提供所需的所有SQL命令,以將其作為本地數據庫安裝在您的node-webkit應用中。 這是我如何處理所有這些命令的代碼片段:
var importDatabase = function(all_sql_commands) {
var index = 0;
var deferred = $q.defer();
nextRecord(index, all_sql_commands);
function nextRecord(index, all_sql_commands) {
if (index < all_sql_commands.length) {
db.transaction(function(tx) {
tx.executeSql(all_sql_commands[index],
[],
function(transaction, results) {
nextRecord(++index, all_sql_commands);
},
function(transaction, error) {
console.log(error.message + ". Trying to execute: " + all_sql_commands[index]);
nextRecord(++index, all_sql_commands);
});
});
} else {
deferred.resolve("all done");
}
}
;
return deferred.promise;
}
我在工廠中有此代碼,並且是遞歸的,因此一次只處理一個命令。 這是我在進入數據庫時初始化數據庫的方式:
configFactory.database().then(function(results) {
var deferred = $q.defer();
deferred.resolve(results);
return deferred.promise;
}).then(function(results) {
sqlManager.exportTables().then(function(tables) { // get a list of tables
sqlManager.dropTables(tables).then(function() {// make sure they are clean
sqlManager.importSqlCommands(results.import_sql_file_name).then(function(all_sql_commands) { // read in importSQL.txt, CREATE TABLE first, then INSERT INTO's next
sqlManager.importDatabase(all_sql_commands).then(function(results) { // loop through the commands and run the SQL scripts.
$scope.databaseInstalled = "Database installed";
});
});
});
});
});
我的配置工廠:
define(['angular', 'sherpaManagerFactories'], function(angular) {
var databaseConfig = window.requireNode('./app/node/config/database');
angular.module('sherpaManager.factories').factory('configFactory', ['$q', function($q) {
var database = function() {
var deferred = $q.defer();
deferred.resolve(databaseConfig.database);
return deferred.promise;
};
return {
database: database
};
}]);
});
最后是我的databaseConfig本身:
var Q = window.requireNode('q');
var deferred = Q.defer();
var database = function() {
var obj = {};
obj.database_name = "SherpaManager"; // TODO figure out how to pass this into the sqlManager factory. Right now it's hard coded into the sqlManager
obj.import_sql_file_name = "./config/SherpaManager.sql";
deferred.resolve(obj);
return deferred.promise;
}
module.exports.database = database();
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.