簡體   English   中英

如何在node-webkit應用中連接Web sql?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM