Zum Inhalt springen
Der Guide für ein smartes Leben.
Offline online sein mit Google Gears

Teil 4: [Workshop] Google Gears: Dynamische Inhalte offline zur Verfügung stellen

Autoren: Redaktion pcmagazin und Andreas Hitzig • 11.12.2009 • ca. 2:15 Min

Sie können verschiedene Begriffe auch mit einer logischen Verknüpfung versehen, wobei UND der Standardoperator ist und weggelassen wird. Der String schubidu lalala sucht nach allen Datensätzen, in denen die beiden Begriffe gleichzeitig auftauchen, schubidu OR lalala begnügt sich auch mit einem d...

Sie können verschiedene Begriffe auch mit einer logischen Verknüpfung versehen, wobei UND der Standardoperator ist und weggelassen wird. Der String schubidu lalala sucht nach allen Datensätzen, in denen die beiden Begriffe gleichzeitig auftauchen, schubidu OR lalala begnügt sich auch mit einem der beiden. Mit einem Minuszeichen schließen Sie einen Begriff explizit aus, das Asterisk-Zeichen dient als Platzhalter für ein oder mehrere Zeichen.

Google Gears
SQLite 3 unterstützt Sie bei der Administration Ihrer Datenbank.
© Archiv

Weitere Informationen zum Syntax finden Sie online unter . Es handelt sich dabei um die Website von fts1, da sich an der Bedienung der Erweiterung nichts geändert hat im Vergleich zur ersten Version.

Damit Sie bei größeren Tabellen ein wenig an Performance gewinnen, benötigen Sie eine zusätzliche Standardtabelle, welche die zu indizierende Spalte enthält und Ihre fts2-Tabelle. Die beiden Tabellen werden in der Abfrage über einen Inner Join miteinander verbunden. Wenn Sie also die Spalte text1 indizieren möchten, generieren Sie sich eine weitere Tabelle und fügen Sie dieser optional weitere Spalten hinzu.

db.execute('CREATE TABLE meine_tab2
(text1 TEXT PRIMARY KEY, text3 INTEGER)');

Die beiden Tabellen verknüpfen Sie anschließend in einer SQL-Abfrage:

var rs = db.execute('SELECT
meine_tab.rowid FROM meine_tab, meine_tab2 ' + ' WHERE meine_tab.rowid = meine_tab2.rowid AND meine_tab2.text3 > ? AND meine_tab MATCH ?', ['schubi', 'doooo']);

Wie das Beispiel zeigt, wird zur Verknüpfung die rowid der beiden Tabellen verwendet. Für die Abfrage können Sie anschließend sowohl Argumente aus der Tabelle meine_tab als auch aus der indizierten Tabelle meine_tab2 verwenden.

Datenbankmanipulationen müssen in beiden Tabellen synchron gehalten werden, da Sie ansonsten nicht mehr über die rowid auf die Datensätze zugreifen können. Verwenden Sie deswegen eine Transaktion, um die Datenmanipulation zu kapseln und sicherzustellen, dass beide Tabellen konsistent geändert werden.

db.execute('BEGIN');
... Zugriff auf meine_tab ...
... Änderungen auf meine_tab1 ...
db.execute('COMMIT');

HTML-Seite

Jetzt können Sie Ihren Usern die Datenbank zur eigenen Suche anbieten. Dazu müssen Sie nur noch die Eingabe nach vorne in den Browser verlagern. Im Beispiel wird der Nachname eines Rennfahrers abgefragt und dazu der Rennstall ausgegeben. Dazu werden die Beispieltabellen verwendet.

<form><input type="text"
name="fahrer" id="fahrer"><input type="button" value="OK"
onclick="gears_suche()"></form>

Die HTML-Abfrage ist einfach gehalten und wird über eine Form und ein Eingabefeld mit der ID fahrer realisiert.

Die Funktion gears_suche() enthält im Wesentlichen die Bestandteile aus dem zweiten Beispiel, angereichert um eine dynamisch generierte Abfrage der Datenbank auf Basis der Eingabe.

function gears_suche () {
var s_name = document.
getElementById("fahrer").value;
if ( s_name != "" ) {
var db = google.gears.factory.
create('beta.database');
db.open('im_test');
var rs=db.execute('select * from
f1_fahrer where f_nachname like"' + s_name + '"');
}
while (rs.isValidRow()) {
document.writeln("Name des
Fahrers: ", rs.fieldByName("f_vorname"), " ", rs.fieldByName("f_nachname"), " Rennstall: ", rs.fieldByName("name"), "<br>");
rs.next();
}
rs.close();
}

Zum Abschluss wird die Ergebnismenge durchlaufen und die Daten werden auf dem Bildschirm ausgegeben.