Golang Go语言中为啥在 datagrip 上面可以访问的 db2, 通过写程序却抛错?
数据库连接的方法不是很懂. 如果有描述错误, 请见谅.
- 本地 datagrip 是通过 jdbc 去连接目标 as400 背后 db2 的. 开箱即用
jdbc:as400://hostname/database
- 走
https://github.com/ibmdb/go_ibm_db
去访问的时候,
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
“HOSTNAME=HOSTNAMEl” ?是不是多了个 l
更多关于Golang Go语言中为啥在 datagrip 上面可以访问的 db2, 通过写程序却抛错?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
哦哦, 是 typo, 这里是手动改成的 HOSTNAME.
但是, 这个抛错, root cause 并不是这个 typo.
在Golang中,如果你遇到在DataGrip中可以访问DB2数据库,但通过写程序却抛错的情况,可能有几个潜在的原因:
-
连接字符串或参数配置错误:确保你的Golang程序中的数据库连接字符串和参数(如用户名、密码、主机名、端口号、数据库名等)与DataGrip中的配置完全一致。任何细微的差别都可能导致连接失败。
-
驱动支持问题:检查你使用的DB2驱动是否与你的DB2数据库版本兼容,以及是否适用于你的Golang版本。有时候,驱动更新或数据库版本升级可能会导致不兼容。
-
网络问题:确保你的Golang程序运行的环境能够访问DB2数据库所在的服务器。这包括网络防火墙、安全组规则、VPN配置等。
-
权限和认证:确认数据库用户具有足够的权限来执行你的程序试图进行的操作。同时,检查是否使用了正确的认证机制(如Kerberos、SSL等)。
-
SQL语句或查询问题:虽然这与连接问题不直接相关,但错误的SQL语句或查询也可能导致程序抛出错误。确保你的SQL语句在DataGrip中能够正确执行。
解决这类问题通常需要逐步排查上述各个方面。你可以从检查连接字符串开始,然后逐步检查驱动、网络、权限和SQL语句。同时,查看Golang程序的错误日志通常能提供有关失败原因的更多信息。