SQLite データベースへの接続(FireDAC)
データベース接続(FireDAC) への移動
このトピックでは、SQLite データベース ファイルへの接続方法を説明します。
目次
サポート対象バージョン
FireDAC ネイティブ ドライバでは、SQLite データベースのバージョン 3.0 以降をサポートしています。Delphi アプリケーション用に FireDAC で SQLite を使用する方法の詳細は、「FireDAC での SQLite の使用」のトピックを参照してください。
クライアント ソフトウェア
FireDAC では、SQLite ライブラリについて、2 種類のリンク モードをサポートしています。
- 静的リンク ― 次のクライアント ライブラリは、アプリケーションに静的にリンクされます。
- Win32 - sqlite3_x86.obj
- Win64 - sqlite3_x64.obj
- macOS64 - libcgsqlite3.dylib (requires deployment)
- iOSDevice64 - libsqlite.a
- Android32 - libsqlite.a
- Android64 - libsqlite.a
FireDAC provides SQLite binaries v 3.31.1.
- 動的リンク ― SQLite データベースを開くには、次のクライアント ライブラリが必要です。
- Win32 - x86 SQLITE3.DLL
- Win64 - x64 SQLITE3.DLL
- macOS64 - libsqlite3.dylib
- iOSDevice64 - libsqlite3.dylib
- Android32 - libsqlite.so
- Android64 - libsqlite.so
SQLITE_ENABLE_COLUMN_METADATA
は定義されていません)。 その結果、FireDAC は、列の自動インクリメンタル モードが有効かどうか、もしくはそれが有効、無効かの検知に失敗します。ダウンロード方法とその後の手順は以下のとおりです。
- x86 DLL の最新バージョンは、ここで「Precompiled Binaries For Windows」(Windows 用プリコンパイル済みバイナリ)セクションの「DLL」と書かれている項目をダウンロードし、PATH 環境変数に含まれているフォルダ(System32 フォルダなど)またはアプリケーションの EXE フォルダに格納します。
- x64 DLL 版は、ここの "sqlite-netFx40-binary-x64-xxxxx.zip" をダウンロードします。フォルダに解凍し、SQLite.Interop.DLL を SQLITE3.DLL にコピーし、上と同じ場所に格納します。
SQLite の場合、FireDAC は、SQLite エンジンの静的リンクと動的リンクを選択する機能を追加しています。 SQLite エンジンの静的リンクを使用するには、ユニット FireDAC.Phys.SQLiteWrapper.Stat を、プロジェクトのいずれかのユニットの <font_i id="14">uses</font_i id="14"> 句に追加する必要があります。 そうでなければ、動的リンクが選択されます。
TFDPhysSQLiteDriverLink.EngineLinkage プロパティは、リンク モードを制御します。 値が <font_i id="16">slDefault</font_i id="16"> または <font_i id="17">slStatic</font_i id="17"> の場合、FireDAC.Phys.SQLiteWrapper.Stat ユニットが設計時にコンポーネントのホストとなるユニットに追加されます。 アプリケーションが実行時に接続を定義した場合、FireDAC.Phys.SQLiteWrapper.Stat ユニットは手動で追加しなければなりません。
SQLite クライアント ライブラリが正しくインストールされていない場合は、接続を試みたときに以下の例外が発生します。
Linux 版クライアント ソフトウェア
Linux 上の FireDAC では動的リンクしかサポートされておらず、SQLite 3 クライアント ライブラリが必要です。 インストールするには:
-
Ubuntu Server 16.04 LTS では、次を実行します:
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
-
Red Hat Enterprise Linux 7 では、次を実行します:
sudo yum install sqlite sudo ln -s /usr/lib64/libsqlite3.so.0 /usr/lib64/libsqlite3.so
ドライバのリンク
ドライバをリンクするには、以下のいずれかを行います。
- [ツール パレット]の[FireDAC Links]ページから、TFDPhysSQLiteDriverLink コンポーネントをドロップします。
- uses 句に FireDAC.Phys.SQLite ユニットを追加します。
接続定義パラメータ
SQLite データベースに接続するには、ほとんどのアプリケーションで、DriverID、Database を指定する必要があります(詳細については「接続の定義(FireDAC)」参照)。
DriverID=SQLite
パラメータ | 説明 | 値の例 |
---|---|---|
Database |
データベースのパス。 ':memory:' または空文字列を指定すると、空のインメモリ データベースを作成して接続することができます。 パスは、パス変数を含めることができます。 |
|
OpenMode |
データベースを開くモードを以下のいずれかとして指定します。
|
ReadOnly |
Encrypt | データベースのデフォルト暗号化モードを指定します。 このモードは、任意でパスワードを前に付けてオーバーライドすることができます。 それが指定されていなければ、このパラメータで指定したモードが使われます。 このパラメータも指定されていなければ、aes-256 が使われます。 | |
Password | 暗号化されたデータベースのパスワードを指定します。値の形式は、以下のとおりです。
[ aes-128 | aes-192 | aes-256 | aes-ctr-128 | aes-ctr-192 | aes-ctr-256 | aes-ecb-128 | aes-ecb-192 | aes-ecb-256 :] <パスワード>。 任意で、使用する暗号化アルゴリズムを前に付けて指定することができます。 デフォルト値は空文字列で、暗号化しないモードを表します。 |
|
NewPassword |
データベースの新しいパスワードを指定し、暗号化操作を行います。
|
|
BusyTimeout | テーブルがロックされていて UpdateOptions.LockWait が True に設定されている場合にスリープする時間をミリ秒単位で設定します。ゼロは待たないことを意味します。デフォルト値は [10000] です。 | 5000 |
CacheSize | SQLite がメモリ内に一度に保持する最大のデータベース ディスク ページ数を変更します。1 ページごとに 1.5 KB のメモリが使われます。デフォルト値は [10000] です。 | 10000 |
SharedCache | SQLite の共有キャッシュ機能を有効または無効にします。詳細については、こちらを参照。デフォルト値は、True です。 | False |
LockingMode |
データベース接続のロック モードを設定します。値は以下のいずれかです。
デフォルト値は Exclusive です。このモードではシングル ユーザー アプリケーションで読み取り/書き込み速度が最大になるためです。 |
Exclusive |
Synchronous |
データベース ファイルを含むインメモリ キャッシュのデータベース接続同期モードを設定します。値は以下のいずれかです。
|
Off |
ForeignKeys |
アプリケーションで SQLite バージョン 3.6.19 以降を使用している場合に、データベース接続で外部キーを使用できるようになります。値は以下のいずれかです。
|
Off |
StringFormat |
文字列値を表す方式を以下のいずれかとして定義します。
|
Unicode |
GUIDFormat |
GUID 値を格納する方式を以下のいずれかとして定義します。
|
Binary |
DateTimeFormat |
日付/時刻値を格納する方式を以下のいずれかとして定義します。
|
Binary |
Extensions |
SQLite エンジン拡張ライブラリを有効/無効にしたり、読み込む拡張ライブラリを指定します。
|
MyExt.dll;FullTS.dll |
SQLiteAdvanced | SQLite データベース接続オプションを追加で指定します。詳細は、SQLite でサポートされている Pragma 文を参照。 | auto_vacuum = 1;page_size = 4096;temp_store = FILE |
MetaDefCatalog | デフォルト データベース名。カタログ名が MetaDefCatalog と同じ場合、設計時コードではオブジェクト名からカタログ名が省略されます。MetaDefCatalog を設定しても、SQLite セッションにおける現在のデータベースは変更されません。デフォルト値は 'MAIN' です。 | MyDB |
使用例
- ローカル データベースに排他モードで接続する場合:
DriverID=SQLite Database=$(FDHOME)\DB\Data\FDDemo.sdb
- 共有データベースに接続する場合(SQLite データベースを Windows の共有フォルダに格納して複数のユーザーが読み取り/書き込みアクセスできるようにすることは推奨されていません):
DriverID=SQLite Database=\\srv\mydb.sqlite LockingMode=Normal Synchronous=Normal
- 暗号化されていないデータベースを暗号化する場合:
DriverID=SQLite Database=$(FDHOME)\DB\Data\FDDemo.sdb NewPassword=aes-256:123qwe
- 暗号化されたデータベースを開く場合:
DriverID=SQLite Database=c:\temp\test.db Password=123qwe
- インメモリ データベースに接続する場合:
DriverID=SQLite Database=:memory:
- iOS デバイス上で Documents("書類")フォルダ内のデータベース ファイルに排他モードで接続する場合:
DriverID=SQLite Database=$(DOC)/test.sdb
関連項目
- 共通の接続パラメータ
- FAQ
- FireDAC ドライバの構成方法
- FireDAC 接続定義の管理方法
- モバイル チュートリアル:FireDAC と SQLite を使用する(iOS および Android)
- モバイル チュートリアル:モバイル アプリケーションで FireDAC を使用する(iOS および Android)
サンプル
- FireDAC SQLite サンプル