⟵ zur Projektübericht

Motivation

Der ADFC-Stormarn e.V. verwendet Klebeetiketten zur Codierung von Fahrrädern.

EIN-Code Etikett

Auf diesen Etiketten ist ein EIN-Code (Eigentümer-Identifizierungs-Nummer) aufgedruckt, die es der Polizei, den Fundbüros und dem ADFC erlauben, den Eigentümer eines Fahrrads zu ermitteln. Eine über aufgeklebte Etikett angebrachte Plombierfolie schützt dieses vor dem Ablösen.

ADFC EIN-Code-Etikett aufgeklebt

Dieses Verfahren eignet sich auch für andere Gegenstände, wie Kameras, Fahrrad-Akkus, Kinderwagen, Pferdesättel, etc.

Die Codier-Aktionen finden häufig j.w.d. statt und nicht immer gibt es dort einen verlässlichen Zugang zum Internet. Die Daten zur Generierung der EIN-Codes werden deshalb in einer lokal zur Verfügung stehenden SQLite-Datenbank abgelegt.

Diese Seite beschreibt die Extension für den MIT App Inventor zum Zugriff auf die Datenbank.


Version Anpassungen
1.0 (2025-01-23) Initiale Version

 

In­halts­ver­zeich­nis

Über die App Inventor Erweiterung (Extension) UrsAI2SQLiteEIN

Referenz

Eigenschaften

Funktionen

Ereignisse

Download


Über die App Inventor Erweiterung (Extension) UrsAI2SQLiteEIN

Viele Funktionen lassen sich mit den Standardkomponenten des App Inventor entwickeln. Häufig ist die dazu aufzubauende Blockstruktur sehr komplex. Die Formulierung der gleichen Lösung ist, wenn man sie in JAVA formuliert, meist deutlich einfacher und übersichtlicher. Über ein Extension-Programm kann man selbst geschriebenen JAVA-Code in eine App-Inventor-App integrieren.

Die hier beschriebene Extension UrsAI2SQLiteEIN ist speziell für die Bedürfnisse des Allgemeinen Deutsche Fahrrad-Club (ADFC) zugeschnitten. Dennoch werden hier einige Verfahren aufgezeigt, die auch für andere Anwendungen nützlich sein können.

Diese Extension basiert auf der SQLite-Extension von Tom Bennedum. Die meisten Funktionen betreffen vereinfachte Zugriffe auf die Daten. Es wurden aber einige Anpassungen an und Ergänzungen zu den Originalmethoden angebrecht. Die wesentliche sind:

Referenz

Eigenschaften

_ListGemeideLength
Anzahl Gemeinden, die von _Gemeinden zurück geliefert werden soll.
_ListSimilarLength
Anzahl Straßen, die von _getSimilarStrasse max. zurück geliefert werden soll.
DBName
Specifies the name of the database.
DBVersion
Legt den Namen der Datenbank fest.
DebugDialog
Legt fest, ob Debug-Meldungen in Dialogfeldern angezeigt werden sollen.
DebugToast
Legt fest, ob Debug-Meldungen als Toast-Meldungen angezeigt werden sollen.
ReturnColumnNames
Gibt an, ob Ergebnislisten Spaltennamen enthalten sollen. Weitere Informationen finden Sie in den Abfrageblöcken.
Version
Liefert die Versionsnummer der Extension.
VersionSDK
Gibt die Version des Android SDK zurück.

Funktionen

_Capitalize (Name)
Ersetzt den ersten Buchstaben durch einen Großbuchstaben.
_checkStrassenName (StrName)
Prüft, ob der Straßenname mit 'str', 'str.' oder 'strasse' endet.
_CopyDB (AssetFileName)
Kopiert eine Datei aus dem Asset-Speicher ins DB-Verzeichnis
_CopyUpdatesToClipBoard ()
Kopiert die Inhalte der Tabelle DataUpdate in die Zwischenablage.
_ExportUpdates ()
Exportiert die Tabelle DataUpdate in die Datei '/DOWNLOAD/EIN-Update.txt'.
_Gemeinden (Pattern)
Liefert eine Gemeindeliste
_getDataVersion ()
Liefert die Versionsnummer des Datenbank-Inhalts.
_getGemeinde (Kfz, GemSchl)
Liefert den Gemeindenamen zum EIN-Gemeindeschlüssel. Liefert "---", wenn kein passender Datensatz gefunden wurde.
_getGemSchl (GemID)
Liefert den Gemeindeschlüssel zur Gemeinde.
_getKfz (GemID)
Liefert das Kfz-Kennzeichen zur Gemeinde.
_getKreis (GemID)
Liefert den Kreisnamen zur Gemeinde.
_getKreisFromKfz (Kfz)
Liefert den Kreisnamen zum Kfz-Kennzeichen.  Liefert "---", wenn kein passender Datensatz gefunden wurde.
_getLand (GemID)
Liefert den Ländernamen zur Gemeinde.
_getLandFromKfz (Kfz)
Liefert den Ländernamen zum Kfz-Kennzeichen. Liefert "---", wenn kein passender Datensatz gefunden wurde.
_getSchemaVersion ()
Liefert die Versionsnummer des Datenbank-Schemas.
_getSimilarStrasse (GemID, StrName, Distance)
Liefert die Versionnummer des Datenbank-Inhalts.
_getStrasse (Kfz, GemSchl, StrSchl)
Liefert den Straßennamen zum EIN-Straßenschlüssel. Liefert "---", wenn kein passender Datensatz gefunden wurde.
_getStrasseFromStrSchl (GemID, StrSchl)
Liefert den Straßennamen zum EIN-Straßenschlüssel.
_getStrSchl (StrID)
Liefert den Straßenschlüssel zur Straße.
_GetUpdateCount ()
Liefert die Anzahl der in der Tabelle DataUpdate enthaltenen Datensätze.
_GetUpdates ()
Liefert die Inhalte der Tabelle DataUpdate.
_InsertStraße (GemID, Ortsteil, Strasse, StrSchl)
Liefert den Straßenschlüssel zur Straße.
_SendUpdates (MailAddress)
Versendet die Inhalte der Tabelle DataUpdate per E-Mail.
_Strassen (Pattern, GemID, Limit)
Liefert eine Gemeindeliste
AppVersionCode ()
Liefert den Versionscode der App, in die diese Extension eingebunden ist.
AppVersionName ()
Liefert den Versionsnamen der App, in die diese Extension eingebunden ist..
BeginTransaction ()
Startet eine Transaktion in einer geöffneten Datenbank. Verschachtelte Transaktionen werden unterstützt.
CloseDatabase ()
Schließt die Datenbank. Wenn die Datenbank bereits geschlossen ist, geschieht nichts. Alle nicht festgeschriebenen Transaktionen werden zurückgesetzt.
CommitTransaction ()
Schließt die letzte offene Transaktion ab.
DatabaseExists ()
Gibt true zurück, wenn die Datenbankdatei existiert, andernfalls false.
DatabasePath ()
Gibt den vollständigen Pfad zur Datenbank zurück, auch wenn diese noch nicht existiert.
Delete (table, whereClause, bindParams)
Führt eine SQL DELETE-Anweisung aus. Die WHERE-Klausel ist optional. Wenn keine where-Klausel angegeben ist, werden alle Zeilen in der Tabelle gelöscht. Jeder Bind-Parameter ersetzt das entsprechende „?“ in der WHERE-Klausel. Gibt die Anzahl der betroffenen Zeilen zurück, wenn eine WHERE-Klausel übergeben wird, andernfalls 0. Wenn ein Fehler auftritt oder die Datenbank nicht geöffnet ist, wird -1 zurückgegeben.
DeleteAsync (tag, table, whereClause, bindParams)
Führt eine SQL DELETE-Anweisung asynchron aus. tag identifiziert das Ergebnis dieses Aufrufs im AfterDelete-Ereignis. Weitere Informationen finden Sie unter Delete.
DeleteDatabase ()
Löscht eine geschlossene Datenbank. Dadurch wird die Datenbankdatei dauerhaft gelöscht.
ExecSelect (sql)
Führt eine einzelne SQL SELECT-Anweisung aus und gibt eine Liste von Datensätzen zurück. Wenn nur eine einzelne Spalte ausgewählt wird, ist jedes Element in der zurückgegebenen Liste der Wert dieser Spalte für jede Ergebniszeile. Wenn mehrere Spalten ausgewählt werden, ist jedes Element der zurückgegebenen Liste selbst eine Liste von Werten für jede ausgewählte Spalte. Wenn die Option ReturnColumnNames auf true gesetzt ist, ist jeder Spaltenwert eine Liste mit zwei Elementen, wobei das erste Element der Spaltenname und das zweite Element der Spaltenwert ist. Wenn die Datenbank nicht geöffnet ist, wird eine leere Liste zurückgegeben..
ExecSQL (sql)
Führt eine einzelne SQL-Anweisung aus, die keine SELECT-Anweisung ist. Wenn die Datenbank nicht geöffnet ist, wird false zurückgegeben.
Execute (sql, bindParams)
Führt eine einzelne, parametrisierte SQL-Anweisung aus, die keine SELECT-Anweisung ist, und gibt zurück, ob sie erfolgreich war oder nicht. Jeder Bind-Parameter ersetzt das entsprechende „?“ in der WHERE-Klausel der Abfrage. Wenn die Datenbank nicht geöffnet ist, wird false zurückgegeben.
ExecuteAsync (tag, sql, bindParams)
Führt eine einzelne, parametrisierte SQL-Anweisung asynchron aus, die keine SELECT-Anweisung ist, und gibt zurück, ob sie erfolgreich war oder nicht. Tag identifiziert das Ergebnis dieses Aufrufs im AfterExecute-Ereignis. Weitere Informationen unter Execute.
ExecuteFile (fileName)
Führt mehrere SQL-Anweisungen aus einer Datei aus und gibt die Anzahl der erfolgreich ausgeführten Anweisungen zurück. Jede Zeile der Datei sollte eine vollständige Nicht-SELECT-SQL-Anweisung sein, optional gefolgt von einem Semikolon. Einzeilige (--) und mehrzeilige (/*...*/) Kommentare werden ignoriert. Zeilenfortsetzung mit '\' wird unterstützt. '\n' wird durch tatsächliche Zeilenumbrüche ersetzt. Die Ausführung wird beim ersten Fehler beendet. Wenn die Datenbank nicht geöffnet ist, wird -1 zurückgegeben. Stellen Sie dem Dateinamen ein / voran, um aus einer bestimmten Datei auf der SD-Karte zu lesen. Um mit einer Anwendung gepackte Assets zu lesen (funktioniert auch für den Companion), beginnen Sie den Dateinamen mit // (zwei Schrägstriche). Wenn ein Dateiname nicht mit einem Schrägstrich beginnt, wird er aus dem privaten Speicher der Anwendung (für gepackte Apps) und für den Companion aus /sdcard/AppInventor/data gelesen.
ExecuteFileAsync (tag, fileName)
Führt mehrere SQL-Anweisungen aus einer Datei asynchron aus. tag identifiziert das Ergebnis dieses Aufrufs im AfterExecute#AfterExecuteFileFile-Ereignis. Weitere Informationen finden Sie unter ExecuteFile.
ExportDatabase (fileName)
Exportiert die aktuell geschlossene Datenbank in die angegebene Datei. Die resultierende Datei ist eine vollständige SQLite-Datenbank. Gibt true zurück, wenn der Export erfolgreich war, andernfalls false.
ImportDatabase (fileName)
Importiert eine SQLite-Datenbank und ersetzt damit vollständig die aktuell geschlossene Datenbank. Gibt true zurück, wenn der Import erfolgreich war, andernfalls false.
Insert (table, columns, values)
Führt eine SQL INSERT-Anweisung aus. columns enthält eine Liste mit Spaltennamen. values enthält eine Liste mit Spaltenwerten. Gibt die Zeilen-ID der neu eingefügten Zeile zurück. Wenn ein Fehler auftritt oder die Datenbank nicht geöffnet ist, wird -1 zurückgegeben.
InsertAsync (tag, table, columns, values)
Führt eine SQL INSERT-Anweisung asynchron aus. tag identifiziert das Ergebnis dieses Aufrufs im AfterInsert-Ereignis. Weitere Informationen unter Insert.
InsertBulk (Table, Data, Separator)
Fügt mehrere Zeilen mit Daten aus einer mehrzeiligen Zeichenfolge in eine Tabelle ein. Die erste Zeile der Zeichenfolge sollte eine CSV-Liste der Spaltennamen sein. Jede der folgenden Zeilen sollte eine CSV-Liste mit Werten für jede neue Zeile sein. Leere Zeilen werden ignoriert. Zeilenfortsetzung mit „\“ wird unterstützt. „\n“ wird durch tatsächliche Zeilenumbrüche ersetzt. Die Einfügung wird beim ersten Fehler beendet. Wenn die Datenbank nicht geöffnet ist, wird -1 zurückgegeben.
InsertFile (table, fileName, Separator)
Fügt mehrere Zeilen mit Daten aus einer Datei in eine Tabelle ein. Die erste Zeile der Datei sollte eine CSV-Liste der Spaltennamen sein. Jede der folgenden Zeilen sollte eine CSV-Liste mit Werten für jede neue Zeile sein. Leere Zeilen werden ignoriert. Zeilenfortsetzung mit '\' wird unterstützt. '\n' wird durch tatsächliche Zeilenumbrüche ersetzt. Das Einfügen wird beim ersten Fehler beendet. Wenn die Datenbank nicht geöffnet ist, wird -1 zurückgegeben. Stellen Sie dem Dateinamen ein / voran, um aus einer bestimmten Datei auf der SD-Karte zu lesen. Um mit einer Anwendung gepackte Assets zu lesen (funktioniert auch für den Companion), beginnen Sie den Dateinamen mit // (zwei Schrägstriche). Wenn ein Dateiname nicht mit einem Schrägstrich beginnt, wird er aus dem privaten Speicher der Anwendung (für gepackte Apps) und für den Companion aus /sdcard/AppInventor/data gelesen.
InsertFileAsync (tag, table, fileName, Separator)
Fügt mehrere Zeilen mit Daten aus einer Datei asynchron in eine Tabelle ein. tag identifiziert das Ergebnis dieses Aufrufs im Ereignis AfterInsertFile. Weitere Informationen unter InsertFile.
IsDatabaseOpen ()
Gibt true zurück, wenn die Datenbank geöffnet ist, andernfalls false.
OpenDatabase ()
Öffnet die Datenbank. Wenn die Datenbank bereits geöffnet ist, geschieht weiter nichts.
Replace (table, columns, values)
Führt eine SQL REPLACE-Anweisung aus. columns enthält eine Liste mit Spaltennamen. values enthält eine Liste mit Spaltenwerten. Gibt die Zeilen-ID der neu eingefügten oder aktualisierten Zeile zurück. Wenn ein Fehler auftritt oder die Datenbank nicht geöffnet ist, wird -1 zurückgegeben.
ReplaceAsync (tag, table, columns, values)
Führt eine SQL REPLACE-Anweisung asynchron aus. tag identifiziert das Ergebnis dieses Aufrufs im AfterReplace-Ereignis. Weitere Informationen unter Replace.
RollbackTransaction ()
Rollt die zuletzt geöffnete Transaktion zurück.
Select (table, distinct, columns, whereClause, bindParams, groupBy, having, orderBy, limit)
Führt eine SQL SELECT-Anweisung aus. whereClause ist optional. Wenn keine whereClause angegeben ist, werden alle Zeilen der Tabelle zurückgegeben. Jeder Bind-Parameter ersetzt das entsprechende „?“ in whereClause. groupBy ist optional. Wenn nicht angegeben, wird keine Gruppierung durchgeführt. having ist optional. Wenn nicht angegeben, werden alle Zeilengruppen zurückgegeben. orderBy ist optional. Wenn nicht angegeben, werden die Zeilen ungeordnet zurückgegeben. limit ist optional. Wenn nicht angegeben, werden alle übereinstimmenden Zeilen zurückgegeben. Wenn nur eine einzelne Spalte ausgewählt wird, ist jedes Element in der zurückgegebenen Liste der Wert dieser Spalte für jede Ergebniszeile. Wenn mehrere Spalten ausgewählt werden, ist jedes Element der zurückgegebenen Liste selbst eine Liste von Werten für jede ausgewählte Spalte. Wenn die Option ReturnColumnNames auf true gesetzt ist, ist jeder Spaltenwert eine Liste mit zwei Elementen, wobei das erste Element der Spaltenname und das zweite Element der Spaltenwert ist.
SelectAsync (tag, table, distinct, columns, whereClause, bindParams, groupBy, having, orderBy, limit)
Führt eine SQL SELECT-Anweisung asynchron aus. tag identifiziert das Ergebnis dieses Aufrufs im AfterSelect-Ereignis. Weitere Informationen unter Select.
SelectSQL (sql, bindParams)
Führt eine einzelne, parametrisierte SQL SELECT-Anweisung aus und gibt eine Liste von Datensätzen zurück. Jeder Bind-Parameter ersetzt das entsprechende „?“ in der WHERE-Klausel der Abfrage. Wenn nur eine einzelne Spalte ausgewählt wird, ist jedes Element in der zurückgegebenen Liste der Wert dieser Spalte für jede Ergebniszeile. Wenn mehrere Spalten ausgewählt werden, ist jedes Element der zurückgegebenen Liste selbst eine Liste von Werten für jede ausgewählte Spalte. Wenn die Option ReturnColumnNames auf true gesetzt ist, ist jeder Spaltenwert eine Liste mit zwei Elementen, wobei das erste Element der Spaltenname und das zweite Element der Spaltenwert ist. Wenn die Datenbank nicht geöffnet ist, wird eine leere Liste zurückgegeben.
SelectSQLAsync (tag, sql, bindParams)
Führt eine einzelne, parametrisierte SQL SELECT-Anweisung asynchron aus. tag identifiziert das Ergebnis dieses Aufrufs im AfterSelect-Ereignis. Weitere Informationen unter SelectSQL.
TableCount ()
Gibt die Anzahl der Tabellen in der Datenbank zurück oder -1, wenn ein Fehler auftritt oder die Datenbank nicht geöffnet ist.
TableExists (table)
Gibt true zurück, wenn die Tabelle in der Datenbank vorhanden ist, oder false, wenn die Tabelle nicht vorhanden ist, ein Fehler auftritt oder die Datenbank nicht geöffnet ist.
TableNames ()
Gibt eine Liste mit den Namen der Tabellen in der Datenbank zurück oder eine leere Liste, wenn ein Fehler auftritt oder die Datenbank nicht geöffnet ist.
TableRowCount (table)
Gibt die Anzahl der Zeilen in einer Tabelle zurück oder -1, wenn ein Fehler auftritt oder die Datenbank nicht geöffnet ist.
Update (table, columns, values, whereClause, bindParams)
Führt eine SQL UPDATE-Anweisung aus. columns enthält eine Liste mit Spaltennamen. values enthält eine Liste mit Spaltenwerten. whereClause ist optional. Wenn whereClause nicht angegeben ist, werden alle Zeilen in der Tabelle aktualisiert. Jeder Bind-Parameter ersetzt das entsprechende „?“ in whereClause. Gibt die Anzahl der betroffenen Zeilen zurück. Wenn ein Fehler auftritt oder die Datenbank nicht geöffnet ist, wird -1 zurückgegeben.
UpdateAsync (tag, table, columns, values, whereClause, bindParams)
Führt eine SQL UPDATE-Anweisung asynchron aus. tag identifiziert das Ergebnis dieses Aufrufs im AfterUpdate-Ereignis. Weitere Informationen unter Update.

Ereignisse

AfterDelete (tag, rowCount)
Dieses Ereignis wird nach einem asynchronen Delete-Aufruf ausgelöst. Der im ursprünglichen Aufruf angegebene tag-Wert und die Anzahl der gelöschten Zeilen werden bereitgestellt.
AfterExecute (tag, result)
Dieses Ereignis wird nach einem Aufruf von ExecuteSQLAsync ausgelöst. Der im ursprünglichen Aufruf angegebene tag-Wert und das Ergebnis der Ausführung werden bereitgestellt.
AfterExecuteFile (tag, execCount)
Dieses Ereignis wird nach einem ExecuteFileAsync ausgelöst. Der im ursprünglichen Aufruf angegebene tag-Wert und das Ergebnis der Ausführung werden bereitgestellt.
AfterInsert (tag, rowId)
Dieses Ereignis wird nach einem asynchronen Insert-Aufruf ausgelöst. Das im ursprünglichen Aufruf angegebene Tag und die Zeilen-ID der neuen Zeile werden bereitgestellt.
AfterInsertFile (tag, rowCount)
Dieses Ereignis wird nach einem asynchronen InsertFile-Aufruf ausgelöst. Der im ursprünglichen Aufruf angegebene tag-Wert und die Anzahl der eingefügten Zeilen werden bereitgestellt.
AfterReplace (tag, rowId)
Dieses Ereignis wird nach einem asynchronen Replace-Aufruf ausgelöst. Der im ursprünglichen Aufruf angegebene tag-Wert und die Zeilen-ID der neuen oder aktualisierten Zeile werden bereitgestellt.
AfterSelect (tag, rowCount, rows)
Dieses Ereignis wird nach einem asynchronen Select-Aufruf ausgelöst. Der im ursprünglichen Aufruf angegebene tag-Wert, die Anzahl der zurückgegebenen Zeilen und die Ergebniszeilen werden bereitgestellt.
AfterUpdate (tag, rowCount)
Dieses Ereignis wird nach einem asynchronen Update-Aufruf ausgelöst. Der im ursprünglichen Aufruf angegebene tag-Wert und die Anzahl der geänderten Zeilen werden bereitgestellt.
DatabaseClosed ()
Dieses Ereignis wird ausgelöst, wenn die Datenbank geschlossen wird.
DatabaseCreated ()
Dieses Ereignis wird ausgelöst, wenn die Datenbank erstellt wird.
DatabaseDowngrade (oldVersion, newVersion)
Dieses Ereignis wird ausgelöst, wenn die Datenbank heruntergestuft wird. Die vorherige und die neue Versionsnummer werden angegeben. Verwenden Sie dieses Ereignis, um die Datenbank entsprechend der Versionsänderung anzupassen.
DatabaseOpened ()
Dieses Ereignis wird ausgelöst, wenn die Datenbank geöffnet wird.
DatabaseUpgrade (oldVersion, newVersion)
Dieses Ereignis wird ausgelöst, wenn die Datenbank aktualisiert wird. Die vorherige und die neue Versionsnummer werden angegeben. Verwenden Sie dieses Ereignis, um die Datenbank entsprechend der Versionsänderung anzupassen.
SQLError (message)
Dieses Ereignis wird ausgelöst, wenn ein SQL-Fehler auftritt. Die Fehlermeldung wird ausgegeben..

Download

Die Quellen der Extension zum Download.