flutterでSQLite3を扱う際、直接SQLiteコマンドを操作する場合もあります。
flutter的な立場で操作するコマンドをまとめてあります。
1.コマンド一覧(アルファベット順(Help原文))
SQLite3を起動後ヘルプを表示させると以下の順番でコマンドの説明が表示されます。
>sqlite3
SQLite version 3.42.0 2023-05-16 12:36:15
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .help
.auth ON|OFF Show authorizer callbacks
.backup ?DB? FILE Backup DB (default "main") to FILE
.bail on|off Stop after hitting an error. Default OFF
.binary on|off Turn binary output on or off. Default OFF
.cd DIRECTORY Change the working directory to DIRECTORY
.changes on|off Show number of rows changed by SQL
.check GLOB Fail if output since .testcase does not match
.clone NEWDB Clone data into NEWDB from the existing database
.connection [close] [#] Open or close an auxiliary database connection
.databases List names and files of attached databases
.dbconfig ?op? ?val? List or change sqlite3_db_config() options
.dump ?OBJECTS? Render database content as SQL
.echo on|off Turn command echo on or off
.eqp on|off|full|... Enable or disable automatic EXPLAIN QUERY PLAN
.excel Display the output of next command in spreadsheet
.exit ?CODE? Exit this program with return-code CODE
.expert EXPERIMENTAL. Suggest indexes for queries
.explain ?on|off|auto? Change the EXPLAIN formatting mode. Default: auto
.filectrl CMD ... Run various sqlite3_file_control() operations
.fullschema ?--indent? Show schema and the content of sqlite_stat tables
.headers on|off Turn display of headers on or off
.help ?-all? ?PATTERN? Show help text for PATTERN
.import FILE TABLE Import data from FILE into TABLE
.indexes ?TABLE? Show names of indexes
.limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT
.lint OPTIONS Report potential schema issues.
.log FILE|on|off Turn logging on or off. FILE can be stderr/stdout
.mode MODE ?OPTIONS? Set output mode
.nonce STRING Suspend safe mode for one command if nonce matches
.nullvalue STRING Use STRING in place of NULL values
.once ?OPTIONS? ?FILE? Output for the next SQL command only to FILE
.open ?OPTIONS? ?FILE? Close existing database and reopen FILE
.output ?FILE? Send output to FILE or stdout if FILE is omitted
.parameter CMD ... Manage SQL parameter bindings
.print STRING... Print literal STRING
.progress N Invoke progress handler after every N opcodes
.prompt MAIN CONTINUE Replace the standard prompts
.quit Stop interpreting input stream, exit if primary.
.read FILE Read input from FILE or command output
.restore ?DB? FILE Restore content of DB (default "main") from FILE
.save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)
.scanstats on|off|est Turn sqlite3_stmt_scanstatus() metrics on or off
.schema ?PATTERN? Show the CREATE statements matching PATTERN
.separator COL ?ROW? Change the column and row separators
.sha3sum ... Compute a SHA3 hash of database content
.shell CMD ARGS... Run CMD ARGS... in a system shell
.show Show the current values for various settings
.stats ?ARG? Show stats or turn stats on or off
.system CMD ARGS... Run CMD ARGS... in a system shell
.tables ?TABLE? List names of tables matching LIKE pattern TABLE
.timeout MS Try opening locked tables for MS milliseconds
.timer on|off Turn SQL timer on or off
.trace ?OPTIONS? Output each SQL statement as it is run
.version Show source, library and compiler versions
.vfsinfo ?AUX? Information about the top-level VFS
.vfslist List all available VFSes
.vfsname ?AUX? Print the name of the VFS stack
.width NUM1 NUM2 ... Set minimum column widths for columnar output
2.コマンド一覧(アルファベット順(日本語訳))
上記を日本語で説明すると以下の通りになります。
コマンド / オプション | 説明 |
.auth ON|OFF | 認証コールバックを表示します。 |
.backup ?DB? FILE | 指定されたデータベース(DB)をファイルにバックアップします。 |
.bail on|off | エラーが発生したら停止します。デフォルトはOFFです。 |
.binary on|off | バイナリ出力をONまたはOFFにします。デフォルトはOFFです。 |
.cd DIRECTORY | 作業ディレクトリを指定されたディレクトリに変更します。 |
.changes on|off | SQLによって変更された行数を表示します。 |
.check GLOB | 出力が.testcaseの後に一致しない場合に失敗します。 |
.clone NEWDB | 既存のデータベースからNEWDBにデータをクローンします。 |
.connection [close] [#] | 補助データベース接続を開くまたは閉じます。 |
.databases | アタッチされたデータベースの名前とファイルを一覧表示します。 |
.dbconfig ?op? ?val? | sqlite3_db_config()オプションを一覧表示または変更します。 |
.dump ?OBJECTS? | データベースの内容をSQLとして表示します。 |
.echo on|off | コマンドエコーをONまたはOFFにします。 |
.eqp on|off|full|… | 自動EXPLAIN QUERY PLANを有効または無効にします。 |
.excel | 次のコマンドの出力をスプレッドシートで表示します。 |
.exit ?CODE? | このプログラムを指定されたリターンコードで終了します。 |
.expert | インデックスの提案を行う実験的な機能です。 |
.explain ?on|off|auto? | EXPLAINのフォーマットモードを変更します。デフォルトはautoです。 |
.filectrl CMD … | sqlite3_file_control()操作を実行します。 |
.fullschema ?–indent? | スキーマとsqlite_statテーブルの内容を表示します。 ヘッダーの表示をONまたはOFFにします。 |
.headers on|off | ヘッダーの表示をONまたはOFFにします。 |
.help ?-all? ?PATTERN? | PATTERNに一致するヘルプテキストを表示します。 |
.import FILE TABLE | ファイルからデータをテーブルにインポートします。 |
.indexes ?TABLE? | インデックスの名前を表示します。 |
.limit ?LIMIT? ?VAL? | SQLITE_LIMITの値を表示または変更します。 |
.lint OPTIONS | 潜在的なスキーマの問題を報告します。 |
.log FILE|on|off | ログをONまたはOFFにします。FILEはstderrやstdoutを指定できます。 |
.mode MODE ?OPTIONS? | 出力モードを設定します。 |
.nonce STRING | nonceが一致する場合、セーフモードを一時停止します。 |
.nullvalue STRING | NULL値の代わりにSTRINGを使用します。 |
.once ?OPTIONS? ?FILE? | 次のSQLコマンドの出力を一度だけFILEに出力します。 |
.open ?OPTIONS? ?FILE? | 既存のデータベースを閉じ、FILEを再オープンします。 |
.output ?FILE? | 出力をFILEまたはstdoutに送ります。 |
.parameter CMD … | SQLパラメータのバインディングを管理します。 |
.print STRING… | リテラルSTRINGを表示します。 |
.progress N | 毎Nオペコードごとに進行状況ハンドラを呼び出します。 |
.prompt MAIN CONTINUE | 標準プロンプトを置き換えます。 |
.quit | 入力ストリームの解釈を停止し、メインの場合は終了します。 |
.read FILE | FILEから入力を読み取ります。 |
.restore ?DB? FILE | FILEからDB(デフォルトは「main」)の内容を復元します。 |
.scanstats on|off|est | sqlite3_stmt_scanstatus()メトリックをONまたはOFFにします。 |
.schema ?PATTERN? | PATTERNに一致するCREATEステートメントを表示します。 |
.separator COL ?ROW? | カラムと行の区切り文字を変更します。 |
.sha3sum … | データベースの内容のSHA3ハッシュを計算します。 |
.shell CMD ARGS… | CMD ARGS…をシステムシェルで実行します。 |
.show | 各種設定の現在の値を表示します。 |
.stats ?ARG? | 統計情報を表示するか、ONまたはOFFにします。 |
.system CMD ARGS… | CMD ARGS…をシステムシェルで実行します。 |
.tables ?TABLE? | TABLEに一致するテーブル名を一覧表示します。 |
.timeout MS | ロックされたテーブルの開放をMSミリ秒待ちます。 |
.timer on|off | SQLタイマーをONまたはOFFにします。 |
3.コマンド一覧(用途別)
上記を用途別に(使用する状況に合わせた分類をして)並べ替えると次の様になります。
3-1. データベースの管理
- データベースの作成・オープン・クローズ
.open ?OPTIONS? ?FILE?
: データベースファイルを開く。既存のデータベースを閉じ、指定されたファイルを再オープンします。
・–readonly: データベースを読み取り専用モードで開きます。これにより、データベースの内容を変更することなく、安全にデータを閲覧することができます。
・–uri: データベースファイルのURI(統一リソース識別子)を使用してデータベースを開きます。URIはファイルパスの代わりに使われる特定の形式の文字列です。
・–nomutex: データベースをノーマル・モードで開きます。これは複数のプロセスやスレッドから同時にアクセスする必要がない場合に使用します。
・–fullmutex: データベースをフル・マルチプレクシング・モードで開きます。これは、複数のプロセスやスレッドから同時に安全にアクセスできるようにするために使用されます。
・–private: データベースをプライベート・モードで開きます。このモードでは、共有キャッシュが使用されず、データベースファイルはプライベートになります。
・–shared: データベースを共有キャッシュ・モードで開きます。このモードでは、複数のデータベース接続が同じキャッシュを共有できます。.clone NEWDB
: 現在接続中の既存データベースからNEWDBにデータをクローンします。.backup ?DB? FILE
: 現在接続中の既存データベースや、指定されたデータベースを、ファイルにバックアップします。.restore ?DB? FILE
: ファイルからデータベースを復元します。
- 接続の管理
.connection [close] [#]
: 補助データベース接続を開くまたは閉じます。
- 設定の確認・変更
.dbconfig ?op? ?val?
:sqlite3_db_config()
オプションを一覧表示または変更します。
3-2. データベースの情報表示
- スキーマ情報
.schema ?PATTERN?
: PATTERNに一致するCREATEステートメントを表示します。.fullschema ?--indent?
: スキーマとsqlite_stat
テーブルの内容を表示します。
- データベース構造の表示
.tables ?TABLE?
: TABLEに一致するテーブル名を一覧表示します。.indexes ?TABLE?
: テーブルのインデックス名を表示します。
- データベース内容のダンプ
.dump ?OBJECTS?
: データベースの内容をSQLとして表示します。
3-3. データ操作
- データのインポート・エクスポート
.import FILE TABLE
: ファイルからデータをテーブルにインポートします。.once ?OPTIONS? ?FILE?
: 次のSQLコマンドの出力を一度だけファイルに出力します。.output ?FILE?
: 出力をファイルまたはstdoutに送ります。
- データの表示
.print STRING...
: リテラルSTRINGを表示します。.mode MODE ?OPTIONS?
: 出力モードを設定します。.nullvalue STRING
: NULL値の代わりにSTRINGを使用します。.headers on|off
: ヘッダーの表示をONまたはOFFにします。
3-4. 診断とデバッグ
- エラーハンドリング
.bail on|off
: エラーが発生したら停止します。デフォルトはOFFです。
- クエリの分析
.explain ?on|off|auto?
: EXPLAINのフォーマットモードを変更します。デフォルトはautoです。.eqp on|off|full|...
: 自動EXPLAIN QUERY PLANを有効または無効にします。.trace ?OPTIONS?
: 実行される各SQLステートメントを出力します。
- 統計情報
.stats ?ARG?
: 統計情報を表示するか、ONまたはOFFにします。.scanstats on|off|est
:sqlite3_stmt_scanstatus()
メトリックをONまたはOFFにします。
3-5. 管理と設定
- 動作の制御
.timeout MS
: ロックされたテーブルの開放をMSミリ秒待ちます。.limit ?LIMIT? ?VAL?
: SQLITE_LIMITの値を表示または変更します。
- 作業環境の設定
.cd DIRECTORY
: 作業ディレクトリを指定されたディレクトリに変更します。.prompt MAIN CONTINUE
: 標準プロンプトを置き換えます。
3-6. セキュリティと認証
- 認証設定
.auth ON|OFF
: 認証コールバックを表示します。
3-7. その他
- システムコマンドの実行
.shell CMD ARGS...
: CMD ARGS…をシステムシェルで実行します。.system CMD ARGS...
: CMD ARGS…をシステムシェルで実行します。
- ヘルプとバージョン情報
.help ?-all? ?PATTERN?
: PATTERNに一致するヘルプテキストを表示します。.version
: ソース、ライブラリ、およびコンパイラのバージョンを表示します。
- 終了とログ
.exit ?CODE?
: このプログラムを指定されたリターンコードで終了します。.quit
: 入力ストリームの解釈を停止し、メインの場合は終了します。
4.FlutterのSQLiteについて
FlutterでSQLite3を扱う為のパッケージ(sqflite、sqflite_common_ffi、等)のうち、sqflite_common_ffiによりSQLite3で作成されるデータベースは、Flutterプロジェクトの配下に作成されます。その場所は次の通りです。
Flutterプロジェクト\.dart_tool\sqflite_common_ffi\databases
↑ここに、****.db というデータベースが作成されます↑
もし上記の場所のデータベースを操作する場合は、上記の場所に移動してから、sqlite3コマンドを実行する必要があります。
cd <上記のフォルダ>
sqlite3
以降、冒頭でも書いてある通り、Flutter開発中に、よく利用する手順をまとめてあります。
1.データの確認:
(前提)データベース名:example.db、テーブル名:items
sqlite> .open example.db
sqlite> .tables
items
sqlite> .schema items
CREATE TABLE items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT
);
sqlite> select * from items;
1|カレーライス
2|冷麺
3|焼きそば
2.データの追加:
(前提)データベース名:example.db、テーブル名:items
sqlite> insert into items ( id, name ) values ( 4, '牛丼' );
sqlite> select * from items;
1|カレーライス
2|冷麺
3|焼きそば
4|牛丼
3.データの更新:
(前提)データベース名:example.db、テーブル名:items
sqlite> update items set name = '特盛牛丼' where id = 4;
sqlite> select * from items;
1|カレーライス
2|冷麺
3|焼きそば
4|特盛牛丼
4.データの削除:
(前提)データベース名:example.db、テーブル名:items
※テーブルの削除は以降の「6.テーブルの削除」を参照願います。
sqlite> delete from items where name like '%麺%';
sqlite> select * from items;
1|カレーライス
3|焼きそば
4|特盛牛丼
5.テーブル・データのバックアップ・復元:
(1)テーブル・データのバックアップ:
(前提)データベース名:example.db、テーブル名:items、バックアップ用ファイル:items_backup.sql
sqlite> .output items_backup.sql
sqlite> .dump items
sqlite> .output stdout
すると、バックアップファイル(items_backup.sql1)が作成されます。
このファイルの内容は次の通りです。
※意味的には、以下容はテーブルのバックアップ内容(1~9行目)になります。
データのバックアップ内容は(7~9行目)になります。
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT
);
INSERT INTO items VALUES(1,'カレーライス');
INSERT INTO items VALUES(3,'焼きそば');
INSERT INTO items VALUES(4,'特盛牛丼');
COMMIT;
(2)データの復元:
(前提)データベース名:example.db、テーブル名:items、バックアップ用ファイル:items_backup.sql
sqlite> select * from items;
1|カレーライス
3|焼きそば
4|特盛牛丼
sqlite> delete from items;
sqlite> select * from items;
// データはすべて削除されたのでここには何も表示されません //
ここで上記(1)のバックアップファイル中にあるデータ追加用コマンド(insert文)を実行することでデータは復元されます。
sqlite> INSERT INTO items VALUES(1,'カレーライス');
sqlite> INSERT INTO items VALUES(3,'焼きそば');
sqlite> INSERT INTO items VALUES(4,'特盛牛丼');
sqlite> select * from items;
1|カレーライス
3|焼きそば
4|特盛牛丼
6.テーブルの削除・復元
上記5がデータの復元であるのに対して、ここではテーブル自体の削除・復元の手順です。
sqlite> .table
items
sqlite> drop table items;
sqlite> .table
// テーブル自体が削除されているのでここにはテーブル(items)は表示されません //
sqlite> .read items_backup.sql
sqlite> .table
items
sqlite> select * from items;
1|カレーライス
3|焼きそば
4|特盛牛丼 // ←テーブルとデータの復元は成功です。