Golang Go语言中为啥在 datagrip 上面可以访问的 db2, 通过写程序却抛错?

发布于 1周前 作者 caililin 来自 Go语言

数据库连接的方法不是很懂. 如果有描述错误, 请见谅.

  • 本地 datagrip 是通过 jdbc 去连接目标 as400 背后 db2 的. 开箱即用
jdbc:as400://hostname/database
package main

import ( “database/sql” “fmt” _ “github.com/ibmdb/go_ibm_db” )

const ( HOSTNAME = “HOSTNAME” DATABASE = “DATABASE” UID = “UID” PWD = “PWD” )

func main() { con := “HOSTNAME=HOSTNAMEl;DATABASE=DATABASE;PORT=50000;UID=UID;PWD=PWD”

type Db *sql.DB
var re Db
re = Create_Con(con)
err := display(re)
if err != nil {
	fmt.Println(err)
}

}

func Create_Con(con string) *sql.DB { db, err := sql.Open(“go_ibm_db”, con) if err != nil { fmt.Println(err) return nil } return db }

func display(db *sql.DB) error { st, err := db.Prepare(“select * from RIDCPNM”) if err != nil { return err } err = execquery(st) if err != nil { return err } return nil }

func execquery(st *sql.Stmt) error { rows, err := st.Query() if err != nil { return err } cols, _ := rows.Columns() fmt.Println(cols) return nil }

抛错

SQLDriverConnect: {08001} [IBM][CLI Driver] SQL30081N  A communication error has been detected. Communicati
on protocol being used: "TCP/IP".  Communication API being used: "SOCKETS".  Location where the error was d
etected: "HOSTNAME".  Communication function detecting the error: "recv".  Protocol specific error code(
s): "10054", "*", "0".  SQLSTATE=08001

是目标 as400 所在的机器, 没有开通啥(防火墙, 端口)吗?


Golang Go语言中为啥在 datagrip 上面可以访问的 db2, 通过写程序却抛错?

更多关于Golang Go语言中为啥在 datagrip 上面可以访问的 db2, 通过写程序却抛错?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

“HOSTNAME=HOSTNAMEl” ?是不是多了个 l

更多关于Golang Go语言中为啥在 datagrip 上面可以访问的 db2, 通过写程序却抛错?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


哦哦, 是 typo, 这里是手动改成的 HOSTNAME.
但是, 这个抛错, root cause 并不是这个 typo.

在Golang中,如果你遇到在DataGrip中可以访问DB2数据库,但通过写程序却抛错的情况,可能有几个潜在的原因:

  1. 连接字符串或参数配置错误:确保你的Golang程序中的数据库连接字符串和参数(如用户名、密码、主机名、端口号、数据库名等)与DataGrip中的配置完全一致。任何细微的差别都可能导致连接失败。

  2. 驱动支持问题:检查你使用的DB2驱动是否与你的DB2数据库版本兼容,以及是否适用于你的Golang版本。有时候,驱动更新或数据库版本升级可能会导致不兼容。

  3. 网络问题:确保你的Golang程序运行的环境能够访问DB2数据库所在的服务器。这包括网络防火墙、安全组规则、VPN配置等。

  4. 权限和认证:确认数据库用户具有足够的权限来执行你的程序试图进行的操作。同时,检查是否使用了正确的认证机制(如Kerberos、SSL等)。

  5. SQL语句或查询问题:虽然这与连接问题不直接相关,但错误的SQL语句或查询也可能导致程序抛出错误。确保你的SQL语句在DataGrip中能够正确执行。

解决这类问题通常需要逐步排查上述各个方面。你可以从检查连接字符串开始,然后逐步检查驱动、网络、权限和SQL语句。同时,查看Golang程序的错误日志通常能提供有关失败原因的更多信息。

回到顶部