——————————————以下为插入数据报错日志————————————————
执行SQL: INSERT INTO ems.anual_SME_ES_TEST_2503_003 USING ems.anual_status (ess_id) TAGS ( ? ) (ts, update_time, bms_rack_control, off_grid_control, control_mode, active_power, reactive_power, black_start_state) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? )
SQL参数:
SME_ES_TEST_2503_003
2030-07-07 12:00:00
2026-01-20 13:44:39
1
1
4
-10
0
0
2026/01/20 13:44:39 存储Anual失败: [0x216] syntax error near ‘sme_es_test_2503_003 ) (ts, update_time, bms_rack_control, off’ (invalid data or symbol)
PS:相同sql语句,在Java中可以正常执行
——————————————以下为插入数据代码————————————————
package storage
import (
"database/sql"
"fmt"
"strings"
)
type Fields struct {
FieldName string
FieldValue interface{}
}
type TaosSuperTables struct {
BaseDbName string
SuperTableName string
TableName string
SchemaFields []Fields
TagsFields []Fields
}
var DBConn *sql.DB
func SetDB(db *sql.DB) {
DBConn = db
}
func placeholder(columnSize int) string {
var sb strings.Builder
sb.WriteString(" ( ")
for i := 0; i < columnSize; i++ {
if i > 0 {
sb.WriteString(" , ")
}
sb.WriteString("?")
}
sb.WriteString(" ) ")
return sb.String()
}
func InsertData(db *sql.DB, table TaosSuperTables) error {
var tagValues []interface{}
var fieldValues []interface{}
var sql strings.Builder
sql.WriteString("INSERT INTO `")
sql.WriteString(table.BaseDbName)
sql.WriteString("`.")
sql.WriteString(table.TableName)
sql.WriteString(" USING `")
sql.WriteString(table.BaseDbName)
sql.WriteString("`.`")
sql.WriteString(table.SuperTableName)
sql.WriteString("`")
var tagFields []string
for _, f := range table.TagsFields {
tagFields = append(tagFields, f.FieldName)
tagValues = append(tagValues, f.FieldValue)
}
sql.WriteString(" (")
sql.WriteString(strings.Join(tagFields, ", "))
sql.WriteString(") TAGS")
sql.WriteString(placeholder(len(tagValues)))
var schemaFields []string
for _, f := range table.SchemaFields {
schemaFields = append(schemaFields, f.FieldName)
fieldValues = append(fieldValues, f.FieldValue)
}
sql.WriteString(" (")
sql.WriteString(strings.Join(schemaFields, ", "))
sql.WriteString(") VALUES")
sql.WriteString(placeholder(len(fieldValues)))
allValues := append(tagValues, fieldValues...)
_, err := db.Exec(sql.String(), allValues...)
if err != nil {
fmt.Printf("执行SQL: %s\n", sql.String())
fmt.Println("SQL参数:")
for _, value := range allValues {
fmt.Printf("%v\n", value)
}
}
return err
}
总结
此文本将被隐藏
