前提条件:
このチュートリアルの例を実践する前に、次のタスクを完了する必要があります。
A. Golang 言語がまだインストールされていない場合は、システムにインストールします。次のコマンドを実行して、インストールされている Golang のバージョンを確認します。
$ go バージョン
B. sqlite3 がまだインストールされていない場合は、システムにインストールします。 Sqlite3 は Ubuntu 20 以降にデフォルトでインストールされます。次のコマンドを実行して、インストールされている sqlite3 のバージョンを確認します。
$ sqlite3 --バージョン
C. 次のコマンドを実行して「golang-sqlite」という名前のフォルダーを作成し、SQLite データベース ファイルと Golang ファイルが保存されるそのフォルダーに移動します。
$ mkdir golang-sqlite$ cd golang-sqlite
D. 次のコマンドを実行して、Golang で SQLite を使用するために必要な Golang パッケージをダウンロードします。
$ github.com/mattn/go-sqlite3 を取得してください
Golang と SQLite を使用したデータベース操作
このチュートリアルでは、SQLite データベースと Golang スクリプトを使用した基本的なデータベース操作を示します。このチュートリアルで説明するデータベース タスクのリストを以下に示します。
- SQLiteデータベースを作成する
- SQLite データベース接続を作成する
- 新しいテーブルを作成する
- テーブルにデータを挿入する
- テーブルからデータを読み取る
- テーブルのデータを更新する
- テーブルからデータを削除する
Golang を使用して SQLite データベースを作成する
「test.db」という名前の新しい SQLite データベース ファイルを作成する次のスクリプトを使用して Golang ファイルを作成します。 4 つのモジュールがスクリプトにインポートされます。 「fmt」モジュールは、端末で出力を印刷するために使用されます。 「ログ」モジュールは、エラーが発生したときにプログラムを中止するために使用されます。 「os」モジュールは、SQLite データベースの作成とエラーの処理に使用されます。 「go-sqlite3」モジュールは、Golang を介して SQLite データベースに接続するために使用されます。ここでは、「os」モジュールの Create() メソッドを使用して SQLite データベースを作成します。データベースが正常に作成されると、成功メッセージが端末に表示されます。それ以外の場合、プログラムは終了します。 Close() メソッドは、データベース接続を閉じるために呼び出されます。
パッケージ 主要//必要なモジュールをインポートする
輸入 (
「fmt」
'ログ'
'あなた'
_ 「github.com/mattn/go-sqlite3」
)
機能 主要 () {
// 新しい SQLite データベースを作成します
データベース 、 エラー := あなた 。 作成する ( 「テスト.db」 )
// エラーがないかチェックする
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
// 成功メッセージを出力します
fmt 。 プリントイン ( 「データベースが作成されました。」 )
}
//データベース接続を閉じる
データベース 。 近い ()
}
次のコマンドを実行して、「db_connect.go」ファイルを実行します。
$ db_connect.go を実行します「ls」コマンドを実行して、「test.db」データベース ファイルが作成されているかどうかを確認します。
$ls次の出力は、成功メッセージ「データベースが作成されました」が出力に表示され、「test.db」ファイルが現在の場所に作成されたことを示しています。
Golang を使用して SQLite データベースに接続する
「test.db」データベース ファイルを開き、データベースとの接続を確立する次のスクリプトを使用して Golang ファイルを作成します。このタスクを実行するために、Golang のデータベース/SQL モジュールがここにインポートされます。ここでは、open() メソッドを使用して、既存の SQLite データベースとの接続を確立します。データベースが正常に接続されると、成功メッセージが端末に表示されます。それ以外の場合、プログラムは終了します。
パッケージ 主要//必要なモジュールをインポートする
輸入 (
「fmt」
'ログ'
「データベース/SQL」
_ 「github.com/mattn/go-sqlite3」
)
機能 主要 () {
// 新しい SQLite データベースを作成します
データベース 、 エラー := SQL 。 開ける ( 「sqlite3」 、 「テスト.db」 )
// エラーがないかチェックする
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
// 成功メッセージを出力します
fmt 。 プリントイン ( 「データベースは正常に接続されました。」 )
}
//データベース接続を閉じる
データベース 。 近い ()
}
次のコマンドを実行して、「db_connect2.go」ファイルを実行します。
$ db_connect2.go を実行します次の出力は、「test.db」データベース ファイルが開かれ、正常に接続されたことを示しています。成功メッセージ「データベースは正常に接続されました」が出力に表示されます。
Golang を使用して SQLite データベースにテーブルを作成する
次のスクリプトを使用して Golang ファイルを作成し、「test.db」データベース ファイル内に「members」という名前のデータベース テーブルを作成します。ここでは Exec() メソッドを使用して、6 つのフィールドと主キーを持つ「members」テーブルを作成する CREATE TABLE クエリを実行します。データベース内にテーブルが正常に作成されると、成功メッセージが出力されます。それ以外の場合、プログラムは終了します。
パッケージ 主要//必要なモジュールをインポートする
輸入 (
「fmt」
'ログ'
「データベース/SQL」
_ 「github.com/mattn/go-sqlite3」
)
機能 主要 () {
// 新しい sqlite データベースを作成します
データベース 、 エラー := SQL 。 開ける ( 「sqlite3」 、 「テスト.db」 )
// エラーがないかチェックする
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
定数 クエリ 弦 = `
CREATE TABLE IF NOT EXISTS メンバー (
id INTEGER NOT NULL 主キー、
名前 CHAR(40) NOT NULL、
mtype CHAR(100) NOT NULL、
CHAR(50) に電子メールを送信し、
住所テキストが NULL ではありません、
モバイル CHAR(25) NOT NULL);`
_ 、 エラー := データベース 。 幹部 ( クエリ );
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
// 成功メッセージを出力します
fmt 。 プリントイン ( 「テーブルが正常に作成されました。」 )
}
}
//データベース接続を閉じる
データベース 。 近い ()
}
次のコマンドを実行して、「create_table.go」ファイルを実行します。
$ go run create_table.go次の出力は、テーブルがデータベースに正常に作成されたことを示しています。成功メッセージ「テーブルが正常に作成されました」がターミナルに表示されます。
SQLite にログインして、データベースにテーブルが作成されているかどうかを確認できます。
次のコマンドを実行して、「test.db」データベースで SQLite を実行します。
$ sqlite3テスト.dbSQLite コマンド プロンプトから「.tables」SQLite コマンドを実行して、データベースのテーブル名を確認します。
sqlite3 > .tables次の出力は、Golang スクリプトの実行によって作成された「members」テーブルがデータベースに含まれていることを示しています。
Golang を使用して SQLite テーブルにレコードを挿入する
INSERT クエリを複数回実行するか、1 つの INSERT クエリに複数の値を追加することで、テーブルに複数のレコードを挿入できます。単一の INSERT クエリを使用して、「test.db」データベース ファイルの「members」テーブルに 3 つのレコードを挿入する次のスクリプトを含む Golang ファイルを作成します。ここでは Exec() メソッドを使用して INSERT クエリを実行します。レコードがテーブルに正常に挿入されると、成功メッセージが出力されます。それ以外の場合、プログラムは終了します。
パッケージ 主要//必要なモジュールをインポートする
輸入 (
「fmt」
'ログ'
「データベース/SQL」
_ 「github.com/mattn/go-sqlite3」
)
機能 主要 () {
// 新しい SQLite データベースを作成します
データベース 、 エラー := SQL 。 開ける ( 「sqlite3」 、 「テスト.db」 )
// エラーがないかチェックする
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
定数 クエリ 弦 = `
INSERT INTO メンバー (ID、名前、タイプ、電子メール、アドレス、携帯電話)
VALUES(1, 'ネハル・アーメッド', 'シルバー', 'nehal@gmail.com','36, ダンモンディ 2, ダッカ','01844657342'),
(2, 'アビル・チョードリー', 'ゴールド', 'abir@gmail.com','102, Mirpur 10, Dhaka','01994563423'),
(3, 'ミルザ・アッバス', 'シルバー', 'abbas@gmail.com','12, ジガタラ、ダッカ','01640006710');`
//クエリを実行します
_ 、 エラー := データベース 。 幹部 ( クエリ );
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
// 成功メッセージを出力します
fmt 。 プリントイン ( 「レコードは正常に挿入されました。」 )
}
}
//データベース接続を閉じる
データベース 。 近い ()
}
次のコマンドを実行して、「insert_table.go」ファイルを実行します。
$ go run insert_table.go次の出力は、レコードがテーブルに正常に挿入されたことを示しています。成功メッセージ「レコードが正常に挿入されました」が出力に表示されます。
SQLite にログインして、「members」テーブルに 3 つのレコードが正常に挿入されたかどうかを確認できます。
次のコマンドを実行して、「test.db」データベースで SQLite を実行します。
$ sqlite3テスト.db次の SELECT クエリを実行して、「members」テーブルのすべてのコンテンツを読み取ります。
sqlite3 > 選択 * メンバーから ;次の出力は、「members」テーブルに Golang スクリプトによって挿入された 3 つのレコードが含まれていることを示しています。
Golang を使用して SQLite テーブルのデータを読み取る
「members」テーブルのレコードを読み取る次のスクリプトを使用して Golang ファイルを作成します。 SELECT クエリから返された値を格納するには、Golang で変数を定義する必要があります。このスクリプトでは、SELECT クエリを使用して「members」テーブルから 5 つのフィールドが取得されます。したがって、「mtype」フィールドの値が「Silver」である「members」テーブルの 5 つのフィールドの値を保存するために、スクリプト内で 5 つの変数が定義されています。ここでは、Query() メソッドを使用して SELECT クエリを実行します。次に、「for」ループを使用して、SELECT クエリによって返された結果セットを読み取ります。 printf() 関数は、結果セットのフォーマットされた値を出力するために使用されます。
パッケージ 主要//必要なモジュールをインポートする
輸入 (
「fmt」
'ログ'
「データベース/SQL」
_ 「github.com/mattn/go-sqlite3」
)
機能 主要 () {
// 新しい SQLite データベースを作成します
データベース 、 エラー := SQL 。 開ける ( 「sqlite3」 、 「テスト.db」 )
// エラーがないかチェックする
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
//行の値を格納する変数を宣言します
だった ID 整数
だった 名前 弦
だった mtype 弦
だった 住所 弦
だった 携帯 弦
定数 クエリ 弦 = `ID、名前、タイプ、アドレス、携帯電話を選択します
メンバーから
WHERE mtype = 'シルバー';`
//クエリを実行します
行 、 エラー := データベース 。 クエリ ( クエリ );
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
// 成功メッセージを出力します
fmt 。 プリントイン ( 「全シルバーメンバーの記録:」 )
fmt 。 プリントイン ( 「ID \t 名前 \t \t メンバータイプ \t 住所 \t \t 連絡先番号' )
のために 行 。 次 () {
行 。 スキャン ( &id 、 &名前 、 タイプ(&M) 、 &住所 、 &携帯 )
fmt 。 プリントフ ( '%d \t %s \t %s \t %s \t %s \n 」 、 ID 、 名前 、 mtype 、 住所 、 携帯 )
}
}
}
//データベース接続を閉じる
データベース 。 近い ()
}
次のコマンドを実行して、「select_table.go」ファイルを実行します。
$ go run select_table.go「members」テーブルには、「mtype」フィールドに「Silver」を含む 2 つのレコードが存在します。次の出力は、SELECT クエリによって返される「members」テーブルの 2 つのレコードを示しています。
Golang を使用して SQLite テーブルのデータを更新する
id 値 2 を含む「members」テーブルの mobile フィールドの値を変更する次のスクリプトを含む Golang ファイルを作成します。ここでは、Exec() メソッドを使用して UPDATE クエリを実行します。テーブル内のレコードが正常に更新されると、成功メッセージが出力されます。それ以外の場合、プログラムは終了します。
パッケージ 主要//必要なモジュールをインポートする
輸入 (
「fmt」
'ログ'
「データベース/SQL」
_ 「github.com/mattn/go-sqlite3」
)
機能 主要 () {
// 新しい SQLite データベースを作成します
データベース 、 エラー := SQL 。 開ける ( 「sqlite3」 、 「テスト.db」 )
// エラーがないかチェックする
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
定数 クエリ 弦 = `
メンバーを更新 SET mobile = '018563452390' WHERE id = 2;`
_ 、 エラー := データベース 。 幹部 ( クエリ );
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
// 成功メッセージを出力します
fmt 。 プリントイン ( 「レコードは正常に更新されました。」 )
}
}
//データベース接続を閉じる
データベース 。 近い ()
}
次のコマンドを実行して、「update_table.go」ファイルを実行します。
$ go run update_table.go「members」テーブルの 2 行目には、id 値 2 が含まれています。次の出力は、テーブルのレコードが正常に更新されたことを示しています。成功メッセージ「レコードは正常に更新されました」が端末に表示されます。
SQLite にログインして、members テーブルのレコードが更新されたかどうかを確認できます。
次のコマンドを実行して、「test.db」データベースで SQLite を実行します。
$ sqlite3テスト.db次の SELECT クエリを実行して、「members」テーブルのすべてのコンテンツを読み取ります。
sqlite3 > 選択 * メンバーから ;2のモバイルフィールドの値 nd スクリプト実行前のメンバーテーブルのレコードは「01994563423」です。次の出力は、2 の mobile フィールドの値を示しています。 nd スクリプトの実行後、メンバーテーブルのレコードは「018563452390」に変更されます。
Golangを使用してSQLiteテーブルのデータを削除する
3 を削除する次のスクリプトで Golang ファイルを作成します。 rd ID 値 3 を含む「members」テーブルのレコード。ここでは Exec() メソッドを使用して DELETE クエリを実行します。レコードがテーブルから正常に削除されると、成功メッセージが出力されます。それ以外の場合、プログラムは終了します。
パッケージ 主要//必要なモジュールをインポートする
輸入 (
「fmt」
'ログ'
「データベース/SQL」
_ 「github.com/mattn/go-sqlite3」
)
機能 主要 () {
// 新しい SQLite データベースを作成します
データベース 、 エラー := SQL 。 開ける ( 「sqlite3」 、 「テスト.db」 )
// エラーがないかチェックする
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
//削除クエリを定義する
定数 クエリ 弦 = `メンバー WHERE id = 3 から削除;`
//クエリを実行します
_ 、 エラー := データベース 。 幹部 ( クエリ );
もし エラー != なし {
// エラーメッセージをログに追加します
ログ 。 致命的 ( エラー )
} それ以外 {
// 成功メッセージを出力します
fmt 。 プリントイン ( 「レコードは正常に削除されました。」 )
}
}
//データベース接続を閉じる
データベース 。 近い ()
}
次のコマンドを実行して、「delete_table.go」ファイルを実行します。
$ go run delete_table.go次の出力は、3 rd 「members」テーブルのレコードが正常に削除されました。成功メッセージ「レコードは正常に削除されました」が端末に表示されます。
SQLite にログインして、members テーブルのレコードが削除されているかどうかを確認できます。
次のコマンドを実行して、「test.db」データベースで SQLite を実行します。
$ sqlite3テスト.db次の SELECT クエリを実行して、「members」テーブルのすべてのコンテンツを読み取ります。
sqlite3 > 選択 * メンバーから ;次の出力は、3 の値が rd members テーブルのレコードはスクリプトの実行後に削除され、他の 2 つのレコードが出力に表示されます。
結論
SQLite と Golang はどちらも、そのシンプルさと軽量な機能で現在人気があります。これらのツールを使用すると、単純なデータベースベースのアプリケーションを簡単に実装できます。アプリケーションの主要な部分は、CRUD 操作を実装することです。このチュートリアルでは、複数の Golang ファイルを使用して、Golang スクリプトと SQLite データベースを使用して CRUD 操作を実装する方法を説明します。 Go 言語と SQLite データベースを初めて学習する場合、このチュートリアルはこれらを基礎から学ぶのに役立ちます。