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

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

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

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

サポート対象バージョン

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

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

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

  • 静的リンク -- x86 sqlite3_x86.obj または x64 sqlite3_x64.obj クライアント ライブラリは、アプリケーションに静的にリンクされます。

FireDAC では、sqlite3_Xxx.obj のバージョン 3.8.3 を提供しています。 これがデフォルト モードで、追加のファイルや作業は必要ありません。 SQLite データベースの暗号化がサポートされているのは静的リンクの場合だけです。

  • 動的リンク -- SQLite データベースを開くには x86 または x64 SQLITE3.DLL クライアント ライブラリが必要です。 SQLITE3.DLL の推奨バージョンは 3.7.7.1 以降です。 Windows 以外のプラットフォームでは、これがデフォルト モードになります。 C++Builder x64 モードの場合、動的リンクが使用されることに注意してください。

ダウンロード方法とその後の手順は以下のとおりです。

  • x86 DLL の最新バージョンは、ここで「Precompiled Binaries For Windows」(Windows 用プリコンパイル済みバイナリ)セクションの「DLL」と書かれている項目をダウンロードし、PATH 環境変数に含まれているフォルダ(System32 フォルダなど)またはアプリケーションの EXE フォルダに格納します。
  • x64 DLL 版は、ここの "sqlite-netFx40-binary-x64-xxxxx.zip" をダウンロードします。 フォルダに解凍し、SQLite.Interop.DLL を SQLITE3.DLL にコピーし、上と同じ場所に格納します。

リンク モードを選択するには、$(BDS)\source\data\firedac\FireDAC.inc で以下を行います。

  • 静的リンクの場合には FireDAC_SQLITE_STATIC を定義します。
  • 動的リンクの場合には FireDAC_SQLITE_STATIC の定義を削除します。

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

[FireDAC][Phys][SQLite]-314. Cannot load vendor library [SQLITE3.DLL]. The specified module could not be found.
Check [SQLITE3.DLL], which is located in one of the PATH directories or in the application EXE directory.

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

Linux 上の FireDAC では動的リンクしかサポートされていません。FireDAC を使用するには以下が必要です。

  • x86 または x64 エンジン libsqlite3.so

Linux 上にインストールするには、以下のコマンドを使用します。

sudo apt-get update
sudo apt-get install sqlite3 libsqlite3-dev

Mac OS X 版および iOS 版クライアント ソフトウェア

Mac OS X および iOS 上の FireDAC では動的リンクしかサポートされていません。FireDAC を使用するには以下が必要です。

  • x86 エンジン libsqlite3.dylib

これは Mac OS X および iOS にあらかじめインストールされています。 ただし、デフォルトの Mac OS X および iOS 用 libsqlite3.dylib は、列メタデータ機能が制限された状態でコンパイルされています(SQLITE_ENABLE_COLUMN_METADATA が未定義です)。 その結果、FireDAC で列の自動インクリメント モードや任意性を検出できない場合があります。

ドライバのリンク

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

接続定義パラメータ

SQLite データベースに接続するには、ほとんどのアプリケーションの場合、DriverIDDatabase を指定する必要があります。

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 :] <password> 任意で、使用する暗号化アルゴリズムを前に付けて指定することができます。 デフォルト値は空文字列で、暗号化しないモードを表します。

  • 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\ADDemo.sdb
  • 共有データベースに接続する場合(SQLite データベースを WinNT の共有フォルダに格納して複数のユーザーが読み取り/書き込みアクセスできるようにすることは推奨されていません):
DriverID=SQLite
Database=\\srv\mydb.sqlite
LockingMode=Normal
Synchronous=Normal
  • 暗号化されていないデータベースを暗号化する場合:
DriverID=SQLite
Database=$(FDHOME)\DB\Data\ADDemo.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

関連項目