docs: go connector support native stmt2 binding
This commit is contained in:
parent
ddd5ddab9c
commit
118b2b9877
|
@ -96,9 +96,19 @@ This is a [more detailed parameter binding example](https://github.com/taosdata/
|
|||
|
||||
</TabItem>
|
||||
<TabItem label="Go" value="go">
|
||||
|
||||
The example code for binding parameters with stmt2 (Go connector v3.6.0 and above, TDengine v3.3.5.0 and above) is as follows:
|
||||
|
||||
```go
|
||||
{{#include docs/examples/go/stmt2/native/main.go}}
|
||||
```
|
||||
|
||||
The example code for binding parameters with stmt is as follows:
|
||||
|
||||
```go
|
||||
{{#include docs/examples/go/stmt/native/main.go}}
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem label="Rust" value="rust">
|
||||
|
||||
|
|
|
@ -493,6 +493,43 @@ The `af` package provides more interfaces using native connections for parameter
|
|||
* **Interface Description**: Closes the statement.
|
||||
* **Return Value**: Error information.
|
||||
|
||||
From version 3.6.0, the `stmt2` interface for binding parameters is provided.
|
||||
|
||||
* `func (conn *Connector) Stmt2(reqID int64, singleTableBindOnce bool) *Stmt2`
|
||||
* **Interface Description**: Returns a Stmt2 object bound to this connection.
|
||||
* **Parameter Description**:
|
||||
* `reqID`: Request ID.
|
||||
* `singleTableBindOnce`: Indicates whether a single child table is bound only once during a single execution.
|
||||
* **Return Value**: Stmt2 object.
|
||||
|
||||
* `func (s *Stmt2) Prepare(sql string) error`
|
||||
* **Interface Description**: Prepares an SQL.
|
||||
* **Parameter Description**:
|
||||
* `sql`: The statement for parameter binding.
|
||||
* **Return Value**: Error information.
|
||||
|
||||
* `func (s *Stmt2) Bind(params []*stmt.TaosStmt2BindData) error`
|
||||
* **Interface Description**: Binds data to the prepared statement.
|
||||
* **Parameter Description**:
|
||||
* `params`: The data to bind.
|
||||
* **Return Value**: Error information.
|
||||
|
||||
* `func (s *Stmt2) Execute() error`
|
||||
* **Interface Description**: Executes the batch.
|
||||
* **Return Value**: Error information.
|
||||
|
||||
* `func (s *Stmt2) GetAffectedRows() int`
|
||||
* **Interface Description**: Gets the number of affected rows (only valid for insert statements).
|
||||
* **Return Value**: Number of affected rows.
|
||||
|
||||
* `func (s *Stmt2) UseResult() (driver.Rows, error)`
|
||||
* **Interface Description**: Retrieves the result set (only valid for query statements).
|
||||
* **Return Value**: Result set Rows object, error information.
|
||||
|
||||
* `func (s *Stmt2) Close() error`
|
||||
* **Interface Description**: Closes the statement.
|
||||
* **Return Value**: Error information.
|
||||
|
||||
The `ws/stmt` package provides interfaces for parameter binding via WebSocket
|
||||
|
||||
* `func (c *Connector) Init() (*Stmt, error)`
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"fmt"
|
||||
"log"
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"github.com/taosdata/driver-go/v3/af"
|
||||
"github.com/taosdata/driver-go/v3/common"
|
||||
"github.com/taosdata/driver-go/v3/common/stmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
host := "127.0.0.1"
|
||||
numOfSubTable := 10
|
||||
numOfRow := 10
|
||||
db, err := af.Open(host, "root", "taosdata", "", 0)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to connect to " + host + "; ErrMessage: " + err.Error())
|
||||
}
|
||||
defer db.Close()
|
||||
// prepare database and table
|
||||
_, err = db.Exec("CREATE DATABASE IF NOT EXISTS power")
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to create database power, ErrMessage: " + err.Error())
|
||||
}
|
||||
_, err = db.Exec("USE power")
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to use database power, ErrMessage: " + err.Error())
|
||||
}
|
||||
_, err = db.Exec("CREATE STABLE IF NOT EXISTS meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (groupId INT, location BINARY(24))")
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to create stable meters, ErrMessage: " + err.Error())
|
||||
}
|
||||
// prepare statement
|
||||
sql := "INSERT INTO ? USING meters TAGS(?,?) VALUES (?,?,?,?)"
|
||||
reqID := common.GetReqID()
|
||||
stmt2 := db.Stmt2(reqID, false)
|
||||
err = stmt2.Prepare(sql)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to prepare sql, sql: " + sql + ", ErrMessage: " + err.Error())
|
||||
}
|
||||
for i := 1; i <= numOfSubTable; i++ {
|
||||
// generate column data
|
||||
current := time.Now()
|
||||
columns := make([][]driver.Value, 4)
|
||||
for j := 0; j < numOfRow; j++ {
|
||||
columns[0] = append(columns[0], current.Add(time.Millisecond*time.Duration(j)))
|
||||
columns[1] = append(columns[1], rand.Float32()*30)
|
||||
columns[2] = append(columns[2], rand.Int31n(300))
|
||||
columns[3] = append(columns[3], rand.Float32())
|
||||
}
|
||||
// generate bind data
|
||||
tableName := fmt.Sprintf("d_bind_%d", i)
|
||||
tags := []driver.Value{int32(i), []byte(fmt.Sprintf("location_%d", i))}
|
||||
bindData := []*stmt.TaosStmt2BindData{
|
||||
{
|
||||
TableName: tableName,
|
||||
Tags: tags,
|
||||
Cols: columns,
|
||||
},
|
||||
}
|
||||
// bind params
|
||||
err = stmt2.Bind(bindData)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to bind params, ErrMessage: " + err.Error())
|
||||
}
|
||||
// execute batch
|
||||
err = stmt2.Execute()
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to exec, ErrMessage: " + err.Error())
|
||||
}
|
||||
// get affected rows
|
||||
affected := stmt2.GetAffectedRows()
|
||||
// you can check exeResult here
|
||||
fmt.Printf("Successfully inserted %d rows to %s.\n", affected, tableName)
|
||||
}
|
||||
err = stmt2.Close()
|
||||
if err != nil {
|
||||
log.Fatal("failed to close statement, err:", err)
|
||||
}
|
||||
}
|
|
@ -91,9 +91,20 @@ import TabItem from "@theme/TabItem";
|
|||
```
|
||||
</TabItem>
|
||||
<TabItem label="Go" value="go">
|
||||
|
||||
stmt2 绑定参数的示例代码如下(go 连接器 v3.6.0 及以上,TDengine v3.3.5.0 及以上):
|
||||
|
||||
```go
|
||||
{{#include docs/examples/go/stmt2/native/main.go}}
|
||||
```
|
||||
|
||||
stmt 绑定参数的示例代码如下:
|
||||
|
||||
```go
|
||||
{{#include docs/examples/go/stmt/native/main.go}}
|
||||
```
|
||||
|
||||
|
||||
</TabItem>
|
||||
<TabItem label="Rust" value="rust">
|
||||
|
||||
|
|
|
@ -494,6 +494,37 @@ Prepare 允许使用预编译的 SQL 语句,可以提高性能并提供参数
|
|||
- **接口说明**:关闭语句。
|
||||
- **返回值**:错误信息。
|
||||
|
||||
从 3.6.0 版本开始,提供 stmt2 绑定参数的接口
|
||||
|
||||
- `func (conn *Connector) Stmt2(reqID int64, singleTableBindOnce bool) *Stmt2`
|
||||
- **接口说明**:从连接创建 stmt2。
|
||||
- **参数说明**:
|
||||
- `reqID`:请求 ID。
|
||||
- `singleTableBindOnce`:单个子表在单次执行中只有一次数据绑定。
|
||||
- **返回值**:stmt2 对象。
|
||||
- `func (s *Stmt2) Prepare(sql string) error`
|
||||
- **接口说明**:绑定 sql 语句。
|
||||
- **参数说明**:
|
||||
- `sql`:要绑定的 sql 语句。
|
||||
- **返回值**:错误信息。
|
||||
- `func (s *Stmt2) Bind(params []*stmt.TaosStmt2BindData) error`
|
||||
- **接口说明**:绑定数据。
|
||||
- **参数说明**:
|
||||
- params要绑定的数据。
|
||||
- **返回值**:错误信息。
|
||||
- `func (s *Stmt2) Execute() error`
|
||||
- **接口说明**:执行语句。
|
||||
- **返回值**:错误信息。
|
||||
- `func (s *Stmt2) GetAffectedRows() int`
|
||||
- **接口说明**:获取受影响行数(只在插入语句有效)。
|
||||
- **返回值**:受影响行数。
|
||||
- `func (s *Stmt2) UseResult() (driver.Rows, error)`
|
||||
- **接口说明**:获取结果集(只在查询语句有效)。
|
||||
- **返回值**:结果集 Rows 对象,错误信息。
|
||||
- `func (s *Stmt2) Close() error`
|
||||
- **接口说明**:关闭stmt2。
|
||||
- **返回值**:错误信息。
|
||||
|
||||
`ws/stmt` 包提供了通过 WebSocket 进行参数绑定的接口
|
||||
|
||||
- `func (c *Connector) Init() (*Stmt, error)`
|
||||
|
|
Loading…
Reference in New Issue