目前正在使用node-webkit创建应用程序。我可以在chrome浏览器中看到本地数据库。但是我想从 Mozilla sqllite 附加组件连接数据库。这是否可能。以前,数据库正在我的应用程序的用户目录中创建。我还有一个疑问。对于每次登录,我都会清空也不起作用的数据库。
在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
};
}]);
});
最后是我的数据库配置本身:
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();
希望这有帮助