Herstellen einer Verbindung zu SQLite-Datenbanken (FireDAC)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Datenbankkonnektivität (FireDAC)

In diesem Thema wird beschrieben, wie eine Verbindung zu SQLite-Datenbankdateien hergestellt wird.

Unterstützte Versionen

Der native FireDAC-Treiber unterstützt SQLite-Datenbanken aus der Version 3.0 und höher. Eine detaillierte Erläuterung der Verwendung von SQLite in FireDAC für Delphi-Anwendungen finden Sie unter Verwenden von SQLite mit FireDAC.

Client-Software

FireDAC unterstützt zwei Modi zum Einbinden von SQLite-Bibliotheken:

  • Statisches Linken – die folgenden Client-Bibliotheken werden statisch in die Anwendung gelinkt:
    • Win32 - sqlite3_x86.obj
    • Win64 - sqlite3_x64.obj
    • macOS64 - libcgsqlite3.dylib (Bereitstellung erforderlich)
    • iOSDevice64 - libsqlite.a
    • Android32 - libsqlite.a
    • Android64 - libsqlite.a

FireDAC enthält die Binärdateien von SQLite v 3.31.1.

Hinweis: Die SQLite-Datenbankverschlüsselung wird nur für das statische Linken unterstützt. Ab RAD Studio 11.1 bietet SQLite Encryption Extension (SEE) einen Befehlszeilen-Batch zum Erzeugen von SQLite-OBJs mit C++Builder für das statische FireDAC-Linken. In der Readme-Datei sqlite_see.txt ist der Prozess erklärt (dieses Feature war bereits für RAD Studio 11.0 über ein GetIt-Plugin verfügbar). Weitere Informationen finden Sie auf der Produktseite (EN).
  • Dynamisches Linken – die folgenden Client-Bibliotheken müssen verfügbar sein, damit eine SQLite-Datenbank geöffnet werden kann.
    • Win32 - x86 SQLITE3.DLL
    • Win64 - x64 SQLITE3.DLL
    • macOS64 - libsqlite3.dylib
    • iOSDevice64 - libsqlite3.dylib
    • Android32 - libsqlite.so
    • Android64 - libsqlite.so
Hinweis: RAD Studio Alexandria unterstützt den iOS-Simulator nicht. Wir empfehlen Ihnen die Verwendung früherer Versionen.
Hinweis: Die SQLite-Engine ist auf allen Plattformen außer Windows vorinstalliert. Die Bibliothek wird standardmäßig mit eingeschränkten Möglichkeiten für Spaltenmetadaten kompiliert (SQLITE_ENABLE_COLUMN_METADATA ist nicht definiert). Infolgedessen kann FireDAC möglicherweise nicht erkennen, ob der Modus für die automatische Inkrementierung der Spalte verfügbar ist oder ob er aktiviert oder deaktiviert ist.

Sie können Folgendes herunterladen:

  • Die neueste x86-DLL-Version von hier (EN) (Kapitel "Precompiled Binaries For Windows", Absatz "This is a DLL") und sie in einen in der PATH-Umgebungsvariable angegebenen Ordner (z. B. System32) oder in Ihren Anwendungs-EXE-Ordner kopieren.
  • Die x64-DLL-Version von hier (EN) als "sqlite-netFx40-binary-x64-xxxxx.zip". Extrahieren Sie sie in einen Ordner, benennen Sie SQLite.Interop.DLL in SQLITE3.DLL um, und platzieren Sie sie in einen Ordner wie oben beschrieben.

Für SQLite fügt FireDAC die Möglichkeit hinzu, zwischen statischer und dynamischer Einbindung der SQLite-Engine auszuwählen. Für die Verwendung der statischen Einbindung der SQLite-Engine muss die Unit FireDAC.Phys.SQLiteWrapper.Stat der uses-Klausel einer der Units in Ihrem Projekt hinzugefügt werden. Ansonsten wird die dynamische Einbindung gewählt.

Die Eigenschaft TFDPhysSQLiteDriverLink.EngineLinkage steuert den Bindungsmodus. Wenn der Wert slDefault oder slStatic lautet, dann wird die Unit FireDAC.Phys.SQLiteWrapper.Stat zur Entwurfszeit der Unit, die die Komponente enthält, hinzugefügt. Wenn die Anwendung die Verbindung zur Laufzeit definiert, dann muss die Unit FireDAC.Phys.SQLiteWrapper.Stat manuell hinzugefügt werden.

Wenn die SQLite-Client-Bibliothek nicht ordnungsgemäß installiert wurde, wird beim Verbindungsversuch eine Exception ausgelöst:

[FireDAC][Phys][SQLite]-314. Laden der Herstellerbibliothek [SQLITE3.DLL] nicht möglich. Das angegebene Modul wurde nicht gefunden. Überprüfen Sie [SQLITE3.DLL], die sich in den PATH-Verzeichnissen oder im Anwendungs-EXE-Verzeichnis befindet.

Linux-Client-Software

FireDAC unterstützt auf Linux nur das dynamische Linken und benötigt die SQLite-Client-Bibliothek. So installieren Sie sie:

  1. Auf Ubuntu Server 16.04 LTS, führen Sie aus:
    sudo apt-get install libsqlite3-0
    sudo ln -s /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 /usr/lib/x86_64-linux-gnu/libsqlite3.so
    
  2. Auf Red Hat Enterprise Linux 7, führen Sie aus:
    sudo yum install sqlite
    sudo ln -s /usr/lib64/libsqlite3.so.0 /usr/lib64/libsqlite3.so
    

Treibereinbindung

So binden Sie den Treiber ein:

Verbindungsdefinitionsparameter

Für eine Verbindung mit einer SQLite-Datenbank ist für die meisten Anwendungen die Angabe von DriverID und Database erforderlich (Einzelheiten finden Sie unter Definieren von Verbindungen (FireDAC)).

DriverID=SQLite

Parameter Beschreibung Beispielwert
Database

Ein Pfad zu einer Datenbank. Verwenden Sie ":memory:" oder einen leeren String, um eine leere Datenbank im Arbeitsspeicher zu erstellen und eine Verbindung damit herzustellen. Ein Pfad kann Pfadvariablen enthalten.

  • c:\MyApp\db.sdb
  • $(temp)\db.sdb
OpenMode

Ein Modus zum Öffnen einer Datenbank:

  • CreateUTF8 – Öffnen einer Datenbank zum Lesen oder Schreiben. Wenn die Datenbank nicht vorhanden ist, wird sie mit der Standardcodierung UTF8 (dem Standardwert für Delphi-Versionen vor 2009) erstellt.
  • CreateUTF16 – Öffnen einer Datenbank zum Lesen oder Schreiben. Wenn die Datenbank nicht vorhanden ist, wird sie mit der Standardcodierung UTF16 (dem Standardwert für Delphi-Versionen ab 2009) erstellt.
  • ReadWrite – Öffnen einer Datenbank zum Lesen oder Schreiben. Wenn die Datenbank nicht vorhanden ist, wird eine Exception ausgelöst.
  • ReadOnly – Öffnen einer Datenbank nur zum Lesen. Wenn die Datenbank nicht vorhanden ist, wird eine Exception ausgelöst.
ReadOnly
Encrypt Gibt einen Standardverschlüsselungsmodus für eine Datenbank an. Der Modus kann mit einem optionalen Passwortpräfix überschrieben werden. Wenn kein Passwortpräfix festgelegt ist, dann wird der in diesem Parameter angegebene Modus verwendet. Ansonsten wird "aes-256" verwendet.
Password Legt ein Passwort für eine verschlüsselte Datenbank fest. Der Wert kann die folgende Form haben:

[ aes-128 | aes-192 | aes-256 | aes-ctr-128 | aes-ctr-192 | aes-ctr-256 | aes-ecb-128 | aes-ecb-192 | aes-ecb-256 :] <Passwort> Das optionale Präfix steuert den zu verwendenden Verschlüsselungsalgorithmus. Der Vorgabewert ist ein leerer String, was "unverschlüsselter Modus" bedeutet.

  • aes-256:12345
  • qwe12345qwe
NewPassword

Legt ein neues Passwort für eine Datenbank fest und führt eine Verschlüsselungsoperation durch:

  • Geben Sie ein nicht-leeres "NewPassword" und ein leeres "Password" an, um eine unverschlüsselte Datenbank zu verschlüsseln.
  • Geben Sie ein leeres "NewPassword" und ein nicht-leeres "Password" an, um eine verschlüsselte Datenbank zu entschlüsseln.
  • Geben Sie ein nicht-leeres "NewPassword" und ein nicht-leeres "Password" an, um das Passwort einer verschlüsselten Datenbank zu ändern.
BusyTimeout Legt eine Wartezeit von "ms" Millisekunden fest, wenn eine Tabelle gesperrt ist und UpdateOptions.LockWait auf True gesetzt ist. Null bedeutet keine Wartezeit. Der Vorgabewert ist 10000. 5000
CacheSize Ändert die maximale Anzahl von Datenbank-Festplattenseiten, die SQLite gleichzeitig im Arbeitsspeicher hält. Jede Seite benötigt etwa 1,5 K Speicherplatz. Der Vorgabewert ist 10000. 10000
SharedCache Aktiviert oder deaktiviert das SQLite-Feature "Freigegebener Zwischenspeicher". Weitere Details finden Sie hier (EN). Der Vorgabewert ist True. False
LockingMode

Legt den Sperrmodus für die Datenbankverbindung fest. Folgende Werte sind möglich:

  • Normal – In diesem Modus können mehrere Benutzer auf die Datenbankdateien zugreifen.
  • Exclusive – Dieser Modus ermöglicht die höchste Leistung.

Der Vorgabewert ist "Exclusive", weil damit eine maximale Lese-/Schreibgeschwindigkeit für einzelne Benutzeranwendungen erzielt wird.

Exclusive
Synchronous

Legt den Datenbankverbindungs-Synchronisierungsmodus des Arbeitsspeicherzwischenspeichers mit Datenbankdateien fest. Folgende Werte sind möglich:

  • Full – Synchronisiert bei jedem wichtigen Vorgang.
  • Normal – Wie oben, aber weniger oft.
  • Off – Ermöglicht die höchste Leistung. Das ist der Vorgabewert.
Off
ForeignKeys

Aktiviert die Verwendung von Fremdschlüsseln für die Datenbankverbindung, wenn die Anwendung SQLite Version 3.6.19 oder höher verwendet. Folgende Werte sind möglich:

  • On – Fremdschlüssel sind in einer Sitzung aktiviert. Das ist der Vorgabewert.
  • Off – Fremdschlüssel sind in einer Sitzung deaktiviert.
Off
StringFormat

Definiert, wie String-Werte dargestellt werden sollen:

  • Choose – als ftString, ftWideString, ftMemo, ftWideMemo, abhängig vom deklarierten Datentypnamen (Vorgabe).
  • Unicode – immer als ftWideString/ftWideMemo.
  • ANSI – immer als ftString/ftMemo.
Unicode
GUIDFormat

Definiert, wie GUID-Werte gespeichert werden sollen:

  • String – speichert die GUID als String-Wert (Vorgabe).
  • Binary – speichert die GUID als binären String-Wert (Vorgabe).
Binary
DateTimeFormat

Definiert, wie Datums- und Zeitwerte gespeichert werden sollen:

  • String – speichert Datums- und Zeitwerte als String-Wert im Format YYYY-MM-DD und HH:MM:SS.XXX (Vorgabe).
  • Binary – speichert Datums- und Zeitwerte als reelle Zahl, was dem Julianischem Datum entspricht.
  • DateTime – speichert Datums- und Zeitwerte als reelle Zahl, was dem TDateTime-Wert entspricht.
Binary
Extensions

Aktiviert oder deaktiviert die zu ladenden SQLite-Engine-Erweiterungen oder legt diese fest:

  • True – aktiviert Erweiterungen.
  • False – deaktiviert Erweiterungen (Vorgabe).
  • Verwenden Sie andernfalls eine Liste mit zu ladenden Erweiterungen in der Form <Bibliothek>[=<Eintrittspunkt>][;...].
MyExt.dll;FullTS.dll
SQLiteAdvanced Zusätzliche SQLite-Datenbankverbindungsoptionen. Einzelheiten finden Sie bei den von SQLite unterstützten Pragma-Anweisungen (EN). auto_vacuum = 1;page_size = 4096;temp_store = FILE
MetaDefCatalog Standarddatenbankname. Im Entwurfszeitcode wird der Katalogname im Objektnamen weggelassen, wenn er MetaDefCatalog entspricht. Durch Festlegen von MetaDefCatalog wird die aktuelle Datenbank in der SQLite-Sitzung nicht geändert. Der Vorgabewert ist "MAIN". MyDB

Anwendungsfälle

  • Herstellen einer Verbindung zu einer lokalen Datenbank im exklusiven Modus:


DriverID=SQLite
Database=$(FDHOME)\DB\Data\FDDemo.sdb
  • Herstellen einer Verbindung zu einer freigegebenen Datenbank (es wird nicht empfohlen, SQLite-Datenbanken in freigegebenen Windows-Ordnern für den Lese-/Schreibzugriff von mehreren Benutzern zu speichern):


DriverID=SQLite
Database=\\srv\mydb.sqlite
LockingMode=Normal
Synchronous=Normal
  • Verschlüsseln einer unverschlüsselten Datenbank:


DriverID=SQLite
Database=$(FDHOME)\DB\Data\FDDemo.sdb
NewPassword=aes-256:123qwe
  • Öffnen einer verschlüsselten Datenbank:


DriverID=SQLite
Database=c:\temp\test.db
Password=123qwe
  • Herstellen einer Verbindung zu einer Datenbank im Arbeitsspeicher:


DriverID=SQLite
Database=:memory:
  • Herstellen einer Verbindung zu der Datenbankdatei im Ordner "Documents" auf dem iOS-Gerät im exklusiven Modus:


DriverID=SQLite
Database=$(DOC)/test.sdb

Siehe auch

Beispiele