为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:windows
sql查询是in要查询多个字段, 传参为数组时报错, 那如何查询这样的多个字段?
详情如下截图:
测试用例:
package main
import (
"database/sql"
"fmt"
"gitee.com/chunanyong/dm"
_ "gitee.com/chunanyong/dm"
"github.com/axgle/mahonia"
"time"
)
func main() {
const sqltext = "SELECT * FROM FX_SYSLOG WHERE userid in (:userid) ORDER BY ID DESC"
sqlparams := make([]interface{}, 0)
userid := []string{"U000053","U000128"}
//userid := "U000053" //单个值可以
sqlparams = append(sqlparams, userid)
fmt.Printf("sql: %s\nparams: %v\n\n", sqltext, sqlparams)
db, err := sql.Open("dm", "dm://FXCASETEST:123456789@127.0.0.1:5237")
if err != nil {
fmt.Println("连接出错", err)
}
defer db.Close()
stmt, err := db.Prepare(sqltext)
if err != nil {
fmt.Println("prepare", err)
}
rows, err := stmt.Query(sqlparams...)
if err != nil {
fmt.Println("Query", err)
}
defer rows.Close()
cols, err := rows.Columns()
if err != nil {
fmt.Println("row", err)
}
colsdata := make([]interface{}, len(cols))
for i := 0; i < len(cols); i++ {
colsdata[i] = new(interface{})
}
//遍历每一行
list := make([]map[string]interface{}, 0)
for rows.Next() {
rows.Scan(colsdata...) //将查到的数据写入到这行中
dict := make(map[string]interface{})
for i, val := range colsdata {
field := cols[i]
setMap(dict, field, val) //打印此行
}
list = append(list, dict)
}
fmt.Println(list)
}
func setMap(dict map[string]interface{}, field string, val interface{}) {
k := val.(*interface{})
switch v := (*k).(type) {
case nil:
dict[field] = nil
case bool:
dict[field] = bool(v)
case []byte:
dict[field] = convertToString(string(v), "gbk", "utf-8")
case *dm.DmClob:
len, _ := v.GetLength()
str, _ := v.ReadString(1, int(len))
dict[field] = str
case time.Time:
dict[field] = v.Format("2006-01-02 15:04:05.000")
default:
dict[field] = v
}
}
// 字符串解码函数,处理中文乱码
func convertToString(src string, srcCode string, tagCode string) string {
srcCoder := mahonia.NewDecoder(srcCode)
srcResult := srcCoder.ConvertString(src)
tagCoder := mahonia.NewDecoder(tagCode)
_, cdata, _ := tagCoder.Translate([]byte(srcResult), true)
result := string(cdata)
return result
}
1:您的数据库版本:select id_code
2:您的GO语言配置是否参考https://eco.dameng.com/docs/zh-cn/pm/go-rogramming-guide.html
或者
https://eco.dameng.com/docs/zh-cn/app-dev/go-go.html