日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Go語言database/sql接口的應(yīng)用開發(fā)

本文介紹通過Go語言的database/sql包使用SQL開發(fā)Lindorm寬表應(yīng)用的方法和示例。

前提條件

  • 已下載并安裝Go環(huán)境,建議安裝Go 1.17及以上版本。

  • 已將客戶端IP地址添加至Lindorm實例的白名單中,具體操作,請參見設(shè)置白名單。

使用限制

本文操作僅適用于Lindorm寬表模式,不支持Lindorm寬表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文件中添加數(shù)據(jù)庫驅(qū)動的依賴,內(nèi)容如下:

    import (
        avatica "github.com/apache/calcite-avatica-go/v5"
    )
  3. .go文件的main方法中初始化連接池并配置以下參數(shù),示例如下:

    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)
    // 設(shè)置連接池參數(shù)
    db.SetConnMaxIdleTime(8 * time.Minute)
    db.SetMaxOpenConns(20)
    db.SetMaxIdleConns(2)

    參數(shù)說明如下:

    參數(shù)

    是否必選

    說明

    databaseUrl

    Lindorm寬表SQL地址,例如:http://ld-bp12pc23yfb38****-proxy-lindorm.lindorm.rds.aliyuncs.com:30060。查看方法請參見查看寬表引擎連接地址。

    user

    訪問寬表引擎的用戶名。

    password

    訪問寬表引擎的密碼,如果您忘記了密碼,可以通過Lindorm寬表引擎的集群管理系統(tǒng)修改密碼,具體請參見修改用戶密碼。

    database

    數(shù)據(jù)庫名。

    SetConnMaxIdleTime

    設(shè)置最大空閑時間。默認值為0,表示不超時。

    SetMaxOpenConns

    設(shè)置連接池中允許的最大連接數(shù)。默認值為0,表示沒有限制。

    SetMaxIdleConns

    設(shè)置連接池中允許的最大空閑連接數(shù)。默認值為2。

  4. 在寬表引擎中進行創(chuàng)建表、寫入數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)操作,示例如下:

    • 創(chuàng)建表

      _, 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
      }
    • 寫入數(shù)據(jù)

      • 方法一:直接寫入數(shù)據(jù)。

        _, err = db.Exec("upsert into user_test(id,name,age) values(1,'zhangsan',17)")
        if err != nil {
            fmt.Println("insert data error", err)
            return
        }
      • 方法二:通過綁定參數(shù)的方式進行寫入數(shù)據(jù)。

        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
        }
    • 查詢數(shù)據(jù)

      • 方法一:直接查詢數(shù)據(jù)。

        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)
        }
      • 方法二:通過綁定參數(shù)的方式執(zhí)行參數(shù)化查詢。

        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)
        }
    • 刪除數(shù)據(jù)

      _, err = db.Exec("delete from user_test where id=1")
      if err != nil {
          fmt.Println("delete data error", err)
          return
      }
    說明
    • 在業(yè)務(wù)應(yīng)用的實現(xiàn)中,對于寫入或查詢語句相對固化的場景,推薦使用上述綁定參數(shù)的方式,使用Prepare之后的stmt對象執(zhí)行寫入或查詢。因為這種方式對于相同的語句只會執(zhí)行一次SQL的解析、改寫、優(yōu)化邏輯,有助于提升執(zhí)行性能。

    • 完整的示例代碼請參見代碼示例通過綁定參數(shù)寫入和查詢數(shù)據(jù)。