注册

go语言查询sql时,传入参数为数组会报错type: unsupported type []string, a slice of string

百舸争流 2021/05/28 1399 1

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:windows

sql查询是in要查询多个字段, 传参为数组时报错, 那如何查询这样的多个字段?

详情如下截图:
0528.png

测试用例:

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 }
回答 0
暂无回答
扫一扫
联系客服