概要
SQLite3のコマンドラインツール上で複数のデータベースとの接続を維持するには
.connection
コマンドを使用する。
似たような処理に「
attach/detach
」があるが、「attach/detach」が一つの接続で
複数のデータベースを扱えるようにするSQLであるのに対し、
.connection
は複数の接続を作成するコマンド。
これによって、いちいちコマンドラインツールを終了しなくても 他のデータベースファイルを開くことが可能になった。(最大10接続まで)
.connection
で別々に作られた接続は完全に独立しており、
コマンドラインツール上でデータのやり取りをすることは出来ない。
「.mode」や「 .output 」といったコマンドは接続ごとではなく コマンドラインツールに設定されるためどの接続でも共通。
操作できるのは起動しているコマンドラインツール内の接続のみ。
他のコマンドラインツールやプログラムが同じデータべファイルにアクセスしているかを
確認出来るわけではない。
構文
.connection
コマンドは ver 3.37.0 から利用可能。
現在の接続を確認する
.connection
.conn
新しい接続を作る/番号を指定して接続を切り替える
.connection ?connection_number?
.conn ?connection_number?
接続を切る
ただしアクティブな接続を切ることは出来ない。
.connection close ?connection_number?
.conn close ?connection_number?
実行例
環境
- Windows 10 64bit
- SQLite Command-Line Shell ver 3.38.0
複数の接続を作成する・切断する
- sample.dbに接続する
-
現在の接続を確認する。
sample.dbへの接続がアクティブであることが確認できる。 - sample.dbには「test」という名前のテーブルがあることが確認できる。
- 1番を指定して新しい接続を作成する。
- インメモリデータベースへの接続が新しく作成され、 アクティブになっていることが確認できる。
- 新しいインメモリデータベースなのでテーブルは登録されておらず、 sample.db のテーブルも見ることはできない。
-
新しい接続でデータベースファイルを開くには
.open
コマンドを使う。 - 番号を指定して接続を切り替える。(元に戻す)
- 元のsample.dbの接続を切る。
C:\temp>sqlite3 sample.db
SQLite version 3.38.0 2022-02-22 18:58:40
Enter ".help" for usage hints.
sqlite> -- 1.
sqlite> .connection
ACTIVE 0: sample.db
sqlite> .tables
test
sqlite> -- 2.
sqlite> .connection 1
sqlite> .connection
0: sample.db
ACTIVE 1: (memory)
sqlite> -- 3.
sqlite> .tables
sqlite> select * from test;
Parse error: no such table: test
sqlite> -- 4.
sqlite> .open sample2.db
sqlite> .connection
0: sample.db
ACTIVE 1: sample2.db
sqlite> -- 5.
sqlite> .connection 0
sqlite> .connection
ACTIVE 0: sample.db
1: sample2.db
sqlite> -- 6.
sqlite> .connection close 1
sqlite> .connection
ACTIVE 0: sample.db
「.mode」などのコマンド設定はどの接続でも共通
- 接続1に切り替えて出力モードを「box」に変更
- 接続0に戻しても「box」モードで出力されることが確認できる
sqlite> .connection
ACTIVE 0: ./sample.db
1: ./sample2.db
sqlite> select * from test;
1|test01
sqlite> -- 1.
sqlite> .connection 1
sqlite> .mode box
sqlite> -- 2.
sqlite> .connection 0
sqlite> select * from test;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 1 │ test01 │
└────┴────────┘
参考URL
-
Command Line Shell For SQLite
公式のコマンドラインツールに関するドキュメント
https://www.sqlite.org/cli.html -
Working With Multiple Database Connections
公式のコマンドラインツールで接続を管理する方法について
https://www.sqlite.org/cli.html#working_with_multiple_database_connections