Go Tools for Beginnersを使用したMS SQLデータベースの操作

現時点では、Go言語は毎日ますます一般的になっています。 Habréでは、ハードコアスペシャリスト、プログラマーだけでなく、システム管理者も読むことが興味深いトピックに登場する記事が増えています。



私はシステム管理者として働いており、Goに興味を示しています。なぜなら、私たちは行動を自動化し、クッキーを食べて弱い生物にコーヒーを注ぐ時間を増やすために、bash(シェル)でスクリプトを書く必要があるからです。



プログラマがGoで小さなプログラムを作成しなかった方法について、少し経験を共有したいと思います。



始めましょう。



私が働いている会社には、誰もが使用する特定のプログラムがあります。 MS SQL 2008サーバー上のデータベースに基づいていますが、すばらしい瞬間(私にとってはそれほどではありません)に、上司は、適切な人がそのデータベースの特定のデータを監視するプログラムを作成する必要があると宣言します。



データベース操作するためのdatabase / sqlおよびcode.google.com/p/odbcパッケージがあります。 それらを使用します。 また、MS SQLを操作するODBCドライバーをインストールする必要があることを忘れないでください。 Windowsの場合、これはクライアントDSNを追加することによりOdbcad32.exeを介して行われます。 Linuxの場合、少し複雑ですが、これは記事の一部ではありません。 Googleがあなたを助けると思います。



これは、最初の段階で使用するパッケージのリストを取得する方法です。



import ( "database/sql" "fmt" "log" _ "code.google.com/p/odbc" )
      
      





必要なデータを取得するために、データベースに接続してリクエストを完了しようとしています。



 package main import ( _ "code.google.com/p/odbc" "database/sql" "fmt" "log" ) var ( name_otdel string query string ) func main() { db, err := sql.Open("odbc", "DSN=DBS0") if err != nil { fmt.Println("Error in connect DB") log.Fatal(err) } query = "select t.DepartmentNAME from dbo.oms_Department t where t.rf_LPUID = 1078" rows, err := db.Query(query) if err != nil { log.Fatal(err) } for rows.Next() { if err := rows.Scan(&name_otdel); err != nil { log.Fatal(err) } fmt.Println(name_otdel) } defer rows.Close() }
      
      





プログラムからわかるように、すべてがそれほど複雑ではなく、私のような人(プログラミングをほとんど理解していない人)でもGoで書くことを徐々に学ぶことができます。



確かに、1つの警告があります。 データベースサーバーを展開するとき、MS SQL Serverは通常エンコード設定に影響せず、ほとんどの場所でwindows1251がかかります。 GoですべてがUTF8で機能するため、これにより不便が生じます。 この点で、Goの一部ではない追加のパッケージを使用して、windows1251をUTF8にトランスコードします。



したがって、プログラムを実行すると、コンソールにロシア語の文字の代わりにbelebahが表示されます。 これを回避するには、パッケージgolang.org/x/text/encoding/charmap、golang.org/x/text/transformを使用しましょう



cp1251からUTF8への変換を伴う完全なプログラム
 package main import ( "database/sql" "fmt" "io/ioutil" "log" "strings" "golang.org/x/text/encoding/charmap" "golang.org/x/text/transform" _ "code.google.com/p/odbc" ) var ( name_otdel string name_utf string query string ) func main() { db, err := sql.Open("odbc", "DSN=DBS0") if err != nil { fmt.Println("Error in connect DB") log.Fatal(err) } query = "select t.DepartmentNAME from dbo.oms_Department t where t.rf_LPUID = 1078" rows, err := db.Query(query) if err != nil { log.Fatal(err) } for rows.Next() { if err := rows.Scan(&name_otdel); err != nil { log.Fatal(err) } sr := strings.NewReader(name_otdel) tr := transform.NewReader(sr, charmap.Windows1251.NewDecoder()) buf, err := ioutil.ReadAll(tr) if err != nil { log.Fatal(err) } name_utf = string(buf) fmt.Println(name_utf) } defer rows.Close() }
      
      







最終結果:







すべてが読み取られ、データがデータベースから取り出されることを確認し、喜んでいます。 クエリに2つ以上の列(姓、名、ミドルネームなど)がある場合は、行で指定することを忘れないでください。SQLクエリと同じ順序でスキャンしてください。



この記事を読んだ後、私たちは何を学びましたか? データベースを操作するための基本的な知識を得ました。 さらに、ブラウザなどで処理、ソート、表示することが可能になります。 など この記事は経験豊富なプログラマーを対象としておらず、特に興味深いGo言語を習い始めたばかりの人を対象に書かれています。



All Articles