2015-03-02 6 views
5

Bei der Entwicklung meiner Cordova-Hybrid-Anwendung habe ich mich daran gewöhnt, meine Anwendung in einem normalen Desktop-Browser zu testen, was bisher sehr gut funktioniert hat.Wie verwende ich sqlite mit cordova beim Testen in einem normalen Desktop-Browser?

Jetzt möchte ich sqlite Funktionalität zu meiner Anwendung hinzufügen. Ich sehe, dass es ein Plugin für cordova gibt, aber ich bin neugierig, wie kann ich ein Fallback schreiben, so dass ich, wenn cordova nicht benutzt wird, natürlich sqlite benutzen kann, ohne das cordova plugin zu benutzen? Im Idealfall möchte ich, dass das native sqlite-Objekt genau wie das Plug-in behandelt wird. Daher kann ich alle Tests in einem normalen Browser durchführen, um die Anzahl der Installationen auf einem Gerät zu minimieren - Die Bauzeit für Android ist sehr lang, also möchte ich es so weit wie möglich vermeiden.

Danke!

+0

Erstens: Warum versuchen Sie nicht Emulator? Zweitens: Bauzeit ist nicht so viel! es dauerte fast 20-40 Sekunden. Drittens: Sie können Ripple Emulator versuchen. https://chrome.google.com/webstore/detail/ripple-emulator-beta/geelfhphabnejjhdalkjhgipohgpdnoc Ich habe es nicht verwendet. Aber gehört, dass man es tatsächlich im Browser laufen lassen kann, um Phonegap-Apps zu testen. – AtanuCSE

+1

Sie können WebSQL auf dem Desktop-Browser verwenden. Die Schnittstelle (API) ist die gleiche, ob Sie sie in Cordova oder Desktop-Browser verwenden. Die zugrunde liegende Datenbank kann SQLite sein, hängt jedoch vom Browser ab. Überprüfen Sie diese [link] (http://caniuse.com/#feat=sql-storage) für WebSQL-Unterstützung zwischen Desktop-Browsern. – frank

+0

Große Frage - Ich sehe, niemand hat eine Antwort gegeben. Bist du allein auf die Welt gekommen? – u01jmg3

Antwort

-1

Sie können einen einfachen Wrapper verwenden, der WebSQL für den Browser und SQLite für das Gerät verwendet. Verwenden Sie einfach ein anderes Datenbank-Objekt. WebSQL und SQLite API ist fast identisch. Sie benötigen nur eine andere Initialisierung für Browser und Gerät.

Hier ist mein Beispielcode (ES6):

var runiOS = false; 
var DB; 

// Check browser or device 

var onDeviceReady = new Promise(function(resolve, reject) {  
    if (document.URL.match(/^https?:/i)) { 
     console.log("Running in a browser..."); 
     resolve(); 
    } else { 
     console.log("Running in an app..."); 
     runiOS = true; 
     document.addEventListener("deviceready", resolve, false); 
    } 
}); 

// Run application 
onDeviceReady.then(function() { 
    // Init WebSQL on browser or SQLite on device 
    if (runiOS) { 
     DB = window.sqlitePlugin.openDatabase({ name: 'my.db', location: 'default' }, function (db) {}, function (error) { console.log('Open database ERROR: ' + JSON.stringify(error)); });   
     console.log('DB: SQLite'); 
    } 
    else { 
     DB = window.openDatabase('my', "0.1", "My list", 200000);  
     console.log('DB: WebSQL'); 
    } 

    // ... 

    db.transaction(function(tx) { 
     tx.executeSql('CREATE TABLE IF NOT EXISTS DemoTable (name, score)'); 
     tx.executeSql('INSERT INTO DemoTable VALUES (?,?)', ['Alice', 101]); 
     tx.executeSql('INSERT INTO DemoTable VALUES (?,?)', ['Betty', 202]); 
    }, function(error) { 
     console.log('Transaction ERROR: ' + error.message); 
    }, function() { 
     console.log('Populated database OK'); 
    }); 


    db.transaction(function(tx) { 
     tx.executeSql('SELECT count(*) AS mycount FROM DemoTable', [], function(tx, rs) { 
      console.log('Record count (expected to be 2): ' + rs.rows.item(0).mycount); 
     }, function(tx, error) { 
      console.log('SELECT error: ' + error.message); 
     }); 
    }); 
}); 
+0

Während dieser Link die Frage beantworten kann, werden Link Only-Antworten auf Stack Overflow abgeraten. Sie können diese Antwort verbessern, indem Sie wichtige Teile des Links in Ihre Antwort einfügen. Dadurch wird sichergestellt, dass Ihre Antwort immer noch eine Antwort ist geändert oder entfernt :) – WhatsThePoint

+0

Bitte posten Sie nicht einfach ein Werkzeug oder eine Bibliothek als Antwort. Zeigen Sie zumindest, wie das Problem gelöst wird (http://meta.stackoverflow.com/a/251605), in der Antwort selbst. –

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/18011077) –

Verwandte Themen