2016-04-20 7 views
0

Kann jemand ein einfaches vollständiges Beispiel des Ladens einer vorhandenen sqlite Datenbank zur Verfügung stellen, die node.js nicht verwendet.laden sqlite Datenbank in Javascript mit sql.js

angenommen, dass die SQL-Datenbank wird als index.html

Beispiel in derselben Stelle sitzen:

Ich habe versucht, dieses Beispiel aber "Inhalt" ist nicht definiert. Außerdem würde ich nicht wissen, wie man auf die Daten in "Inhalten" zugreift. Ich könnte wirklich ein komplettes Beispiel verwenden.

var xhr = new XMLHttpRequest(); 
xhr.open('GET', '/path/to/database.sqlite', true); 
xhr.responseType = 'arraybuffer'; 

xhr.onload = function(e) { 
    var uInt8Array = new Uint8Array(this.response); 
    var db = new SQL.Database(uInt8Array); 
    var contents = db.exec("SELECT * FROM my_table"); 
    // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}] 
}; 
xhr.send(); 

Antwort

1

Ich weiß, das ist alt, aber hier gehst du mein Freund. Du warst genau da, nur ein bisschen zwicken. Ich bin mir nicht sicher, ob Sie die SQL.js-Bibliothek von GitHub verwenden, aber bitte tun Sie, da es viele Sicherheitsprobleme des Browsers löst und die SQL-Seite der Dinge für das Gehirn viel einfacher macht.

Wenn Sie die Quelle nicht erstellt haben oder einige UTF-Probleme haben, werden die Ausnahmen ausgelöst. Ich schrieb dies in einer Nacht, also habe ich nicht mehr als ein paar Funktionen ausgeführt, aber ich nehme an, Callbacks werden benötigt, um SQLite-Probleme während asynchronen Prozessen zu verhindern. Dies ist das erste Mal, dass ich SQLite oder die SQL.js-Bibliothek verwende, also weiß ich es noch nicht.

WICHTIG! Dies ist nur eine lokale Lösung, es hat offensichtlichere Schwachstellen als ein Umkleideraum in einer High School. Auf keinen Fall sollte dies jemals auf etwas verwendet werden, das dem Internet ausgesetzt ist.

Dies ist alles oben in meiner Klasse deklariert, nicht innerhalb einer Funktion. Dies ist sinnvoll, da ich mehrere Abfragen ausführen möchte und nicht den Aufwand für das Laden/Entladen des Objekts haben möchte, wenn es zu groß wird.

Beachten Sie den voll qualifizierten Pfad auf der Quelle ... relative Pfade funktionierte nicht für mich.

var xhrLocal = new XMLHttpRequest(); 
xhrLocal.open('GET', 'http://localhost/mp3/data/media.sqlite', true); 
xhrLocal.responseType = 'arraybuffer'; 

var localData; 

xhrLocal.onload = function(e) { 
    var uInt8Array = new Uint8Array(this.response); 
    localData = new SQL.Database(uInt8Array); 
}; 

xhrLocal.send(); 

An diesem Punkt haben Sie die Datenbank in ein Objekt namens localData geladen und Sie können es von überall abfragen. Hier ist eine Abfrage, die ich geschrieben habe, um Genre-Informationen zu erhalten.

function FillGenreLists() { 

    var sqlSel = 'SELECT * FROM GenreData'; 
    var data = localData.exec(sqlSel); 

    var output = []; 
    $.each(data[0].values, function(key, value) 
    { 
     output.push('<option value="'+ value[0] +'">'+ value[1] +'</option>'); 
    }); 

    $('#selGenres').html(output.join('')); 
} 

Die Ausgabe aus dem SQL-Aufruf ist in der Regel ein Array von Arrays, keine Sorge darüber, nur Ausgabe des Ergebnis Ihres SQL-Aufruf an die Konsole zu ändern und die Rückgabe Felder und Werte beachten Sie, dass von dort nur Verwenden Sie $ .Each nach Herzenslust.

Hier ist eine weitere Abfrage, gleiche Prämisse, aber mit dem Ziel, eine SQL-Anweisung zu erstellen, um in MS SQL-Server zu schieben und FreeDB-Daten über Künstler, die in meiner lokalen Sammlung sind.

Hinweis: Dies könnte alle durch Abfragen meinem lokalen SQLite-Tabelle in einem einzigen Aufruf erfolgen, die SQL-Generierung und an die MS SQL unter Verwendung eines anderen Anschl oder noch besser schieben durch eine generische proc verwendet wurden, jedoch wollen wir es einfach halten zur Zeit.

function PrepareMSSQLFilteredFreeDBTables(StartLetter, EndLetter, TempTableName) { 

    var sqlSel = "SELECT * FROM ArtistData WHERE ArtistText BETWEEN '" + StartLetter + "' AND '" + EndLetter + "' ORDER BY ArtistText"; 
    var data = localData.exec(sqlSel); 

    $('.array-cols').append('SELECT * INTO ' + TempTableName + ' FROM FreeDB WHERE DARTIST IN ('); 

    var iLen = (data[0].values.length - 1); 

    $.each(data[0].values, function(a, b) { 
     var sRes; 
     if (a === iLen) { sRes = "'" + b[1].replace("'", "''") + "')"; } 
     else { sRes = "'" + b[1].replace("'", "''") + "', "; } 
     $('.array-cols').append(sRes); 
    }); 
}