为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【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()
}
您好,能提供一下数据吗?
根据您提供的demo,简单构造的数据可以正常执行:
使用您给的数据,也可以正常执行:
我也遇到了相似的问题,在一次排查慢sql的时候发现单独拎出来执行并不慢,然后发现是部分sql存在这种socketTimeout连接时间超长。我是java驱动,SpringBoot+mybatisplus+druid。楼主最终有解决么?
修改sessionTimeout=0或者再改大点然后再试下