Todos os produtos
Search
Central de documentação

Lindorm:Use the APIs provided by the database/sql library of Go to develop applications

Última atualização: Jun 28, 2026

Utilize a biblioteca padrão database/sql do Go para se conectar ao LindormTable SQL e executar operações CRUD, sem a necessidade de um SDK cliente adicional.

Este procedimento não se aplica ao LindormTable Serverless.

Pré-requisitos

Antes de começar, verifique se você possui:

Como funciona

O LindormTable SQL é construído sobre o Apache Calcite, portanto, o padrão sql.Open comum em drivers MySQL ou PostgreSQL não se aplica aqui. Em vez disso, utilize o conector Avatica (avatica.NewConnector) com sql.OpenDB para estabelecer a conexão.

Configure o driver do Go

**Etapa 1: Adicione o driver Avatica ao seu arquivo 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

**Etapa 2: Importe o driver no seu arquivo .go.**

import (
    avatica "github.com/apache/calcite-avatica-go/v5"
)

**Etapa 3: Inicialize o pool de conexões na função 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 connection pool settings
db.SetConnMaxIdleTime(8 * time.Minute)
db.SetMaxOpenConns(20)
db.SetMaxIdleConns(2)

A tabela a seguir descreve os parâmetros de conexão.

Parâmetro

Obrigatório

Padrão

Descrição

databaseUrl

Sim

O endpoint do LindormTable SQL. Formato: http://<endpoint>:30060. Para obter seu endpoint, consulte Visualizar os endpoints do LindormTable.

user

Sim

O nome de usuário para o LindormTable.

password

Sim

A senha para o LindormTable. Para redefinir uma senha esquecida, consulte Alterar a senha.

database

Sim

O nome do banco de dados a ser acessado.

SetConnMaxIdleTime

Não

0 (sem tempo limite)

O tempo máximo de ociosidade das conexões.

SetMaxOpenConns

Não

0 (sem limite)

O número máximo de conexões abertas no pool.

SetMaxIdleConns

Não

2

O número máximo de conexões ociosas no pool.

Execute operações CRUD

Todos os exemplos abaixo utilizam o objeto db inicializado na etapa anterior.

Crie uma tabela

_, 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
}

Grave dados

Para gravações únicas, use execução direta; para gravações repetidas com valores diferentes, prefira prepared statements. Os prepared statements são analisados e otimizados apenas uma vez e reutilizados nas execuções subsequentes, o que melhora o desempenho em gravações em massa ou recorrentes.

Execução direta

_, err = db.Exec("upsert into user_test(id,name,age) values(1,'zhangsan',17)")
if err != nil {
    fmt.Println("insert data error", err)
    return
}

Prepared statement (recomendado para gravações repetidas)

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
}

Consulte dados

Consulta direta

rows, err := db.Query("select * from user_test")
if err != nil {
    fmt.Println("query data error", err)
    return
}
defer rows.Close() // Always close rows to avoid connection leaks.
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)
}

Consulta parametrizada (recomendada para consultas repetidas)

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() // Always close rows to avoid connection leaks.
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)
}

Exclua dados

_, err = db.Exec("delete from user_test where id=1")
if err != nil {
    fmt.Println("delete data error", err)
    return
}

Próximos passos

Confira os exemplos completos e funcionais no GitHub: