ホームページ  >  記事  >  バックエンド開発  >  MySQLサーバーからのデータの読み取り

MySQLサーバーからのデータの読み取り

PHPz
PHPzオリジナル
2024-07-29 08:01:22929ブラウズ

Reading data from Mysql server

必要なパッケージをインポートし、データベース内の tb_student テーブルの例と同じスキーマを持つ構造体を準備します。後で、この構造体はクエリ結果のコンテナーとして使用されます。データ型。

package main
import "fmt"
import "database/sql"
import _ "github.com/go-sql-driver/mysql"


type student struct {
 id string,
 name string,
 age int,
 grade int,
}

使用するデータベース ドライバーは、_ 記号を使用してインポートする必要があります。これは、database/sql パッケージで必要であっても、ドライバーと直接対話しないためです。

次に、データベースに接続する関数を作成します。

func connect() (*sql.DB, error) {
 db, err := sql.Open("mysql","root:@tcp(127.0.0.1:3306)/db_learn_go")
 if err != nil {
  return nil, err
 }
 return db, nil
}

私たちが使用する mysql ドライバーの接続文字列スキームは非常に独特です。以下の root@tcp(127.0.0.1:3306)/db_learn_go は、外出先の MYSQL ドライバー ドライバーで使用できる接続文字列スキームです。別の mysql では、使用するドライバーによって接続スキームが異なる場合があります。

user:password@tcp(host:port)/dbname
user@tcp(host:port)/dbname

以下は、connect() 関数で使用される接続文字列の説明です。

root@tcp(127.0.0.1:3306)/db_learn_go
// user => root
// password =>
// host => 127.0.0.1 atau localhost
// port => 3306
// dbname => db_learn_go

データベースとの接続機能を作成したら、データベースサーバーからデータを読み取るプロセスを練習します。関数を準備します
sqlQuery() と次のコード。

func sqlQuery() {
 db, err := connect()
 if err != nil {
 fmt.Println(err.Error())
 return
 }
 defer db.Close()
 var age = 27
 rows, err := db.Query("select id, name, grade from tb_student where age = ?
 if err != nil {
 fmt.Println(err.Error())
 return
 }
 defer rows.Close()
 var result []student
 for rows.Next() {
 var each = student{}
 var err = rows.Scan(&each.id, &each.name, &each.grade)
 if err != nil {
 fmt.Println(err.Error())
 return
 }
 result = append(result, each)
 }
 if err = rows.Err(); err != nil {
 fmt.Println(err.Error())
 return
 }
 for _, each := range result {
 fmt.Println(each.name)
 }
}

新しい接続が作成されるたびに、常に接続インスタンスを閉じることを忘れないでください。上記のコードのように defer キーワードを使用できます。 defer
db.Close() .
db.Query() 関数は、SQL クエリを実行するために使用されます。関数の 2 番目のパラメーターは可変長であるため、空白のままにすることができます。上記のコードでは、where 句の 1 つの値が疑問符 (?) であることがわかります。

記号はその後のパラメーターの値 (年齢変数の値) に置き換えられます。 SQL インジェクションを防ぐために、このタイプのクエリ作成手法を強くお勧めします。この関数は、 sql.*Rows 型のインスタンスを生成します。これも、使用されなくなったら閉じる必要があります ( defer rows.Close() )。次に、要素タイプが struct Student の配列が、 result という名前で準備されます。後でクエリ結果が変数に保存されます。次に、条件参照を rows.Next() としてループが実行されます。このループを最初のレコードから最後まで1レコードずつ順番に総レコード数分実行します。 sql.Rows 関数の Scan() メソッドは、反復されているレコードの値を取得し、ポインター変数に格納します。レコード フィールドの格納に使用される変数は、クエリで選択されたフィールドに従って、可変個引数パラメーターとして順番に書き込まれます。詳細については、以下の比較を参照してください。 // クエリ
ID、名前、学年を選択...
// スキャン
rows.Scan(&each.id, &each.name, &each.grade ...
取得されたレコード データは、ステートメント
を介して結果スライスに追加されます。 result = append(result, each) .
OK、あとは main で sqlQuery() 関数を呼び出して、プログラムを実行するだけです。

関数 main() {
sqlQuery()
}

私は普通のブログライターです。まだ至らない点が多々あるかもしれませんが、ご容赦ください。

以上がMySQLサーバーからのデータの読み取りの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。