注册

查询长文本字段多行时报错网络通信异常

百舸争流 2021/07/21 1147 13 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:linux, window10
【CPU】:ntel Core i5-8400 @ 6x 4GHz
【问题描述】*: 使用go驱动查询长文本字段多行时,报错网络异常

panic: Error 6001: 网络通信异常 load err
stack info:
   1).  dm.(*dm_build_1285).dm_build_1319.func1
        /home/levi/.gvm/gos/1.15.6/src/dm/a.go:161
   2).  runtime.gopanic
        /home/levi/.gvm/gos/1.15.6/src/runtime/panic.go:969
   3).  dm.(*Dm_build_953).Dm_build_983
        /home/levi/.gvm/gos/1.15.6/src/dm/c.go:97
   4).  dm.(*dm_build_1285).dm_build_1319
        /home/levi/.gvm/gos/1.15.6/src/dm/a.go:181
   5).  dm.(*dm_build_1285).dm_build_1324
        /home/levi/.gvm/gos/1.15.6/src/dm/a.go:233
   6).  dm.(*dm_build_1285).Dm_build_1346
        /home/levi/.gvm/gos/1.15.6/src/dm/a.go:319
   7).  dm.(*DmConnection).close
        /home/levi/.gvm/gos/1.15.6/src/dm/o.go:496
   8).  dm.(*DmConnection).Close
        /home/levi/.gvm/gos/1.15.6/src/dm/o.go:260
   9).  database/sql.(*driverConn).finalClose.func2
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:592
   10).  database/sql.withLock
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:3284
   11).  database/sql.(*driverConn).finalClose
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:590
   12).  database/sql.(*DB).Close
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:847
   13).  runtime.gopanic
        /home/levi/.gvm/gos/1.15.6/src/runtime/panic.go:969
   14).  dm.(*innerRows).fetchData
        /home/levi/.gvm/gos/1.15.6/src/dm/v.go:441
   15).  dm.(*innerRows).Next
        /home/levi/.gvm/gos/1.15.6/src/dm/v.go:252
   16).  dm.(*DmRows).next
        /home/levi/.gvm/gos/1.15.6/src/dm/v.go:132
   17).  dm.(*DmRows).Next
        /home/levi/.gvm/gos/1.15.6/src/dm/v.go:44
   18).  database/sql.(*Rows).nextLocked
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:2858
   19).  database/sql.(*Rows).Next.func1
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:2836
   20).  database/sql.withLock
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:3284
   21).  database/sql.(*Rows).Next
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:2835
   22).  main.Test3
        /dm8/drivers/go/test.go:45
   23).  main.main
        /dm8/drivers/go/test.go:92
   24).  runtime.main
        /home/levi/.gvm/gos/1.15.6/src/runtime/proc.go:204
   25).  runtime.goexit
        /home/levi/.gvm/gos/1.15.6/src/runtime/asm_amd64.s:1374


goroutine 1 [running]:
dm.(*innerRows).fetchData(0xc00062a140, 0x5ec, 0xc0007c5d18)
        /home/levi/.gvm/gos/1.15.6/src/dm/v.go:441 +0xe5
dm.(*innerRows).Next(0xc00062a140, 0xc00061a080, 0x1, 0x1, 0xc0000be078, 0x649d60)
        /home/levi/.gvm/gos/1.15.6/src/dm/v.go:252 +0xa5
dm.(*DmRows).next(...)
        /home/levi/.gvm/gos/1.15.6/src/dm/v.go:132
dm.(*DmRows).Next(0xc000626240, 0xc00061a080, 0x1, 0x1, 0xa42478, 0xc0007c5d98)
        /home/levi/.gvm/gos/1.15.6/src/dm/v.go:44 +0x85
database/sql.(*Rows).nextLocked(0xc000622080, 0xcc0000)
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:2858 +0xbf
database/sql.(*Rows).Next.func1()
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:2836 +0x3c
database/sql.withLock(0xaa7000, 0xc0006220b0, 0xc0007c5de0)
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:3284 +0x69
database/sql.(*Rows).Next(0xc000622080, 0xc0000bc008)
        /home/levi/.gvm/gos/1.15.6/src/database/sql/sql.go:2835 +0x87
main.Test3()
        /dm8/drivers/go/test.go:45 +0x3d2
main.main()
        /dm8/drivers/go/test.go:92 +0x25
exit status 2

代码如下

package main import ( "database/sql" "dm" "fmt" "github.com/axgle/mahonia" "time" ) func Test() { dsn := "dm://YJKJ_GYY_LZ:123456789@127.0.0.1:5236?socketTimeout=5000&sessionTimeout=5000" sqltext := `select sendContent from chitchat_msg` db, err := sql.Open("dm", dsn) if err != nil { fmt.Println(err.Error()) } defer db.Close() stmt, err := db.Prepare(sqltext) if err != nil { fmt.Println(err.Error()) } defer stmt.Close() rows, err := stmt.Query() if err != nil { fmt.Println(err.Error()) } defer rows.Close() cols, err := rows.Columns() if err != nil { fmt.Println(err.Error()) } 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(dict) } if err != nil { fmt.Println(err.Error()) } } 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 } func main() { Test() }
回答 0
暂无回答
扫一扫
联系客服