SQLite データベースへの接続(FireDAC)

提供: RAD Studio
移動先: 案内検索

データベース接続(FireDAC) への移動

このトピックでは、SQLite データベース ファイルへの接続方法を説明します。

サポート対象バージョン

FireDAC ネイティブ ドライバでは、SQLite データベースのバージョン 3.0 以降をサポートしています。Delphi アプリケーション用に FireDAC で SQLite を使用する方法の詳細は、「FireDAC での SQLite の使用」のトピックを参照してください。

クライアント ソフトウェア

FireDAC では、SQLite ライブラリについて、2 種類のリンク モードをサポートしています。

  • 静的リンク -- 次のクライアント ライブラリは、アプリケーションに静的にリンクされます。
    • Win32 - x86 sqlite3_x86.obj
    • Win64 - x64 sqlite3_x64.obj
    • OS X - x86 libcgsqlite3.dylib(デプロイメントが必要)
    • iOSDevice32 - libsqlite.a
    • iOSDevice64 - libsqlite.a
    • Android - libsqlite.a

FireDAC では SQLite バイナリ v 3.9.2 が用意されています。

メモ: SQLite データベースの暗号化がサポートされているのは静的リンクの場合だけです。
  • 動的リンク -- SQLite データベースを開くには、次のクライアント ライブラリが必要です。
    • Win32 - x86 SQLITE3.DLL
    • Win64 - x64 SQLITE3.DLL
    • OS X - libsqlite3.dylib
    • iOSDevice32 - libsqlite3.dylib
    • iOSDevice64 - libsqlite3.dylib
    • Android - libsqlite.so

バージョン 3.7.7.1 以降を使用することをお勧めします。 iOS シミュレータでは、これがデフォルト モードになります。

メモ: SQLite エンジンは、Windows 以外のすべてのプラットフォーム上にプレインストールされています。ライブラリは、デフォルトで、列メタデータ機能が制限された状態でコンパイルされています(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 にコピーし、上と同じ場所に格納します。

リンク モードを選択するには、FireDAC.inc ファイルを変更する必要があります。

  • 静的リンクの場合には FireDAC_SQLITE_STATIC を定義します。
  • 動的リンクの場合には FireDAC_SQLITE_STATIC の定義を削除します。
メモ: FireDAC.inc ファイルは C:\Program Files (x86)\Embarcadero\Studio\20.0\source\data\firedac にあります。

SQLite クライアント ライブラリが正しくインストールされていない場合は、接続を試みたときに以下の例外が発生します。

[FireDAC][Phys][SQLite]-314. Cannot load vendor library [SQLITE3.DLL]. The specified module could not be found. [SQLITE3.DLL] をチェックします。これは、PATH ディレクトリの 1 つ、または、アプリケーション EXE ディレクトリにあります。

Linux 版クライアント ソフトウェア

Linux 上の FireDAC では動的リンクしかサポートされておらず、SQLite 3 クライアント ライブラリが必要です。 インストールするには:

  1. 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
    
  2. Red Hat Enterprise Linux 7 では、次を実行します:
    sudo yum install sqlite
    sudo ln -s /usr/lib64/libsqlite3.so.0 /usr/lib64/libsqlite3.so
    

ドライバのリンク

ドライバをリンクするには、以下のいずれかを行います。

接続定義パラメータ

SQLite データベースに接続するには、ほとんどのアプリケーションで、DriverIDDatabase を指定する必要があります(詳細については「接続の定義(FireDAC)」参照)。

DriverID=SQLite

パラメータ 説明 値の例
Database

データベースのパス。 ':memory:' または空文字列を指定すると、空のインメモリ データベースを作成して接続することができます。 パスは、パス変数を含めることができます。

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

データベースを開くモードを以下のいずれかとして指定します。

  • CreateUTF8 -- 読み取りまたは書き込み用にデータベースを開きます。データベースが存在しない場合には、UTF8 デフォルト エンコーディング(Delphi 2009 より前のデフォルト値)で作成されます。
  • CreateUTF16 -- 読み取りまたは書き込み用にデータベースを開きます。データベースが存在しない場合には、UTF16 デフォルト エンコーディング(Delphi 2009 以降のデフォルト値)で作成されます。
  • ReadWrite -- 読み取りまたは書き込み用にデータベースを開きます。データベースが存在しない場合には、例外が発生します。
  • ReadOnly -- 読み取り専用でデータベースを開きます。データベースが存在しない場合には、例外が発生します。
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 :] <パスワード>。 任意で、使用する暗号化アルゴリズムを前に付けて指定することができます。 デフォルト値は空文字列で、暗号化しないモードを表します。

  • aes-256:12345
  • qwe12345qwe
NewPassword

データベースの新しいパスワードを指定し、暗号化操作を行います。

  • 暗号化されていないデータベースを暗号化するには、空以外の NewPassword と空の Password を指定します。
  • 暗号化されたデータベースを解読するには、空の NewPassword と空以外の Password を指定します。
  • 暗号化されたデータベースのパスワードを変更するには、空以外の NewPassword と空以外の Password を指定します。
BusyTimeout テーブルがロックされていて UpdateOptions.LockWait が True に設定されている場合にスリープする時間をミリ秒単位で設定します。ゼロは待たないことを意味します。デフォルト値は [10000] です。 5000
CacheSize SQLite がメモリ内に一度に保持する最大のデータベース ディスク ページ数を変更します。1 ページごとに 1.5 KB のメモリが使われます。デフォルト値は [10000] です。 10000
SharedCache SQLite の共有キャッシュ機能を有効または無効にします。詳細については、こちらを参照。デフォルト値は、True です。 False
LockingMode

データベース接続のロック モードを設定します。値は以下のいずれかです。

  • Normal -- このモードでは、複数ユーザーによるデータベース ファイルへのアクセスを提供します。
  • Exclusive -- このモードでは、パフォーマンスが最大になります。

デフォルト値は Exclusive です。このモードではシングル ユーザー アプリケーションで読み取り/書き込み速度が最大になるためです。

Exclusive
Synchronous

データベース ファイルを含むインメモリ キャッシュのデータベース接続同期モードを設定します。値は以下のいずれかです。

  • Full -- すべての重大な局面で同期を行います。
  • Normal -- 上と同じですが、頻度が低くなります。
  • Off -- パフォーマンスが最大になります。これがデフォルト値です。
Off
ForeignKeys

アプリケーションで SQLite バージョン 3.6.19 以降を使用している場合に、データベース接続で外部キーを使用できるようになります。値は以下のいずれかです。

  • On -- セッションで外部キーが有効になります。これがデフォルト値です。
  • Off -- セッションで外部キーが無効になります。
Off
StringFormat

文字列値を表す方式を以下のいずれかとして定義します。

  • Choose -- 宣言されたデータ型の名前に応じて ftString/ftWideString/ftMemo/ftWideMemo として表します(デフォルト)。
  • Unicode -- 常に ftWideString/ftWideMemo として表します。
  • ANSI -- 常に ftString/ftMemo として表します。
Unicode
GUIDFormat

GUID 値を格納する方式を以下のいずれかとして定義します。

  • String -- GUID をテキスト文字列値として格納します(デフォルト)。
  • Binary -- GUID をバイナリ文字列値として格納します。
Binary
DateTimeFormat

日付/時刻値を格納する方式を以下のいずれかとして定義します。

  • String -- 日付と時刻をテキスト文字列値として格納します。形式は YYYY-MM-DD および HH:MM:SS.XXX です(デフォルト)。
  • Binary -- 日付と時刻を、ユリウス日を表す実数として格納します。
  • DateTime -- 日付と時刻を、TDateTime 値を表す実数として格納します。
Binary
Extensions

SQLite エンジン拡張ライブラリを有効/無効にしたり、読み込む拡張ライブラリを指定します。

  • True -- 拡張ライブラリを有効にします。
  • False -- 拡張ライブラリを無効にします(デフォルト)。
  • あるいは、読み込む拡張ライブラリのリストを <ライブラリ>[=<エントリ ポイント>][;...] の形式で指定します。
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 デバイスまたは iOS シミュレータ上で Documents("書類")フォルダ内のデータベース ファイルに排他モードで接続する場合:


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

関連項目

サンプル