すべてのプロダクト
Search
ドキュメントセンター

Lindorm:Go の database/sql ライブラリが提供する API を使用してアプリケーションを開発する

最終更新日:Nov 09, 2025

この Topic では、Go の database/sql ライブラリが提供する API を使用して SQL ベースの LindormTable アプリケーションを開発する方法について説明し、例を示します。

前提条件

  • Go V1.17 以降がインストールされていること。Go のダウンロードとインストールの詳細については、「公式ドキュメント」をご参照ください。

  • LindormTable へのアクセスに使用するクライアントの IP アドレスが Lindorm ホワイトリスト に追加されていること。

制限事項

この Topic で説明する手順は、LindormTable Serverless には適用されません。

手順

  1. Go プロジェクトの go.mod ファイルに次の依存関係を追加します:

    require github.com/apache/calcite-avatica-go/v5 v5.0.0
    replace github.com/apache/calcite-avatica-go/v5 => github.com/aliyun/alibabacloud-lindorm-go-sql-driver/v5 v5.0.6
  2. データベースドライバーへの依存関係を .go ファイルに追加します。次のコードブロックに例を示します:

    import (
        avatica "github.com/apache/calcite-avatica-go/v5"
    )
  3. .go ファイルの main メソッドで接続プールを初期化し、関連パラメーターを設定します。次のコードに例を示します:

    databaseUrl := "http://localhost:30060" 
    
    conn := avatica.NewConnector(databaseUrl).(*avatica.Connector)
    conn.Info = map[string]string{
        "user":     "sql",     
        "password": "test",   
        "database": "default", 
    }
    db := sql.OpenDB(conn)
    // Configure the parameters related to the connection pool.
    db.SetConnMaxIdleTime(8 * time.Minute)
    db.SetMaxOpenConns(20)
    db.SetMaxIdleConns(2)

    次の表に、接続プールに設定できるパラメーターを示します。

    パラメーター

    必須

    説明

    databaseUrl

    はい

    LindormTable SQL への接続に使用されるエンドポイント。例: http://ld-bp12pc23yfb38****-proxy-lindorm.lindorm.rds.aliyuncs.com:30060。エンドポイントの取得方法の詳細については、「LindormTable のエンドポイントの表示」をご参照ください。

    user

    はい

    LindormTable への接続に使用するユーザー名。

    password

    はい

    LindormTable への接続に使用するパスワード。パスワードを忘れた場合は、LindormTable のクラスター管理システムで「パスワードの変更」ができます。

    database

    はい

    アクセスするデータベースの名前。

    SetConnMaxIdleTime

    いいえ

    接続の最大アイドル時間。デフォルト値: 0。デフォルト値は、LindormTable への接続がタイムアウトしないことを示します。

    SetMaxOpenConns

    いいえ

    接続プール内の最大接続数。デフォルト値: 0。デフォルト値は、接続プール内の接続数が制限されないことを示します。

    SetMaxIdleConns

    いいえ

    接続プール内の最大アイドル接続数。デフォルト値: 2。

  4. テーブルの作成、テーブルへのデータ書き込み、データのクエリ、データの削除など、LindormTable で操作を実行します。次の例は、LindormTable で操作を実行する方法を示しています:

    • テーブルを作成します。

      _, err := db.Exec("create table if not exists user_test(id int, name varchar,age int, primary key(id))")
      if err != nil {
          fmt.Println("create table error ", err)
          return
      }
    • テーブルにデータを書き込みます。

      • 方法 1: テーブルにデータを直接書き込みます。

        _, err = db.Exec("upsert into user_test(id,name,age) values(1,'zhangsan',17)")
        if err != nil {
            fmt.Println("insert data error", err)
            return
        }
      • 方法 2: パラメーターを指定してテーブルにデータを書き込みます。

        stmt, err := db.Prepare("upsert into user_test(id,name,age) values(?,?,?)")
        if err != nil {
            fmt.Println("prepare error", err)
            return
        }
        _, err = stmt.Exec(1, "zhangsan", 17)
        if err != nil {
            fmt.Println("upsert error", err)
            return
        }
    • データをクエリします。

      • 方法 1: データを直接クエリします。

        rows, err := db.Query("select * from user_test")
        if err != nil {
            fmt.Println("query data error", err)
            return
        }
        defer rows.Close()
        var id int
        var name string
        var age int
        for rows.Next() {
            err = rows.Scan(&id, &name, &age)
            if err != nil {
                   fmt.Println("scan data error", err)
                return
            }
            fmt.Println("id:", id, "name:", name, "age:", age)
        }
      • 方法 2: パラメーターを指定してデータをクエリします。

        stmt, err = db.Prepare("select * from user_test where id=?")
        if err != nil {
            fmt.Println("prepare error", err)
            return
        }
        rows, err := stmt.Query(1)
        if err != nil {
            fmt.Println("query data error", err)
            return
        }
        defer rows.Close()
        var id int
        var name string
        var age int
        for rows.Next() {
            err = rows.Scan(&id, &name, &age)
            if err != nil {
                   fmt.Println("scan data error", err)
                return
            }
            fmt.Println("id:", id, "name:", name, "age:", age)
        }
    • データを削除します。

      _, err = db.Exec("delete from user_test where id=1")
      if err != nil {
          fmt.Println("delete data error", err)
          return
      }
    説明
    • 類似の文を実行してデータを書き込んだりクエリしたりするビジネスシナリオでは、Prepare メソッドで初期化された stmt オブジェクトを使用してデータを書き込んだりクエリしたりすることをお勧めします。この場合、同じ文がバッチで分析、書き換え、最適化されます。これにより、文のパフォーマンスが向上します。

    • 完全なサンプルコードについては、「サンプルコード」および「パラメーターを指定したデータの書き込みとクエリ」をご参照ください。