使用 Windows 使用 golang 与 db2 服务器连接

Posted

技术标签:

【中文标题】使用 Windows 使用 golang 与 db2 服务器连接【英文标题】:connection with db2 server using golang using windows 【发布时间】:2018-11-26 09:58:02 【问题描述】:

我正在尝试使用 golang 连接到 Db2 数据库。我正在使用package 建立连接并使用名为v10.1fp6_ntx64_odbc_cli 的Db2 客户端。

但是,当我看到有关 phiggins 包的说明时,它建议在提供少量环境变量后重新构建包

#!/bin/bash

 DB2HOME=$HOME/sqllib
 export CGO_LDFLAGS=-L$DB2HOME/lib
 export CGO_CFLAGS=-I$DB2HOME/include

 go build .

我是 golang 新手,不知道如何在 Windows 上执行此操作。我尝试使用设置环境变量来做到这一点,但不起作用。出现错误

恐慌:无法加载 db2cli64.dll:找不到指定的模块。 goroutine 1 [运行]: 系统调用。(*LazyProc).mustFind(0xc000060270) C:/Go/src/syscall/dll_windows.go:280 +0x5f syscall.(*LazyProc).Addr(0xc000060270, 0x64) C:/Go/src/syscall/dll_windows.go:287 +0x32 bitbucket.org/phiggins/db2cli/api.SQLAllocHandle(0x4f0001, 0x0, 0xc000071ef8, 0xc000071f00) C:/Users/myuser/go/src/bitbucket.org/phiggins/db2cli/api/zapi_windows.go:44 +0x34 bitbucket.org/phiggins/db2cli.initDriver(0x0, 0x0) C:/Users/myuser/go/src/bitbucket.org/phiggins/db2cli/driver.go:26 +0x57 bitbucket.org/phiggins/db2cli.init.0() C:/Users/myuser/go/src/bitbucket.org/phiggins/db2cli/driver.go:52 +0x29 退出状态2

请帮我解决这个问题,希望使用 golang 连接到 Db2 数据库。

【问题讨论】:

【参考方案1】:

以下步骤让我在 Windows7 pro x64 上从 golang 连接到 Db2。 你的旅费可能会改变。

我使用了一个最新的“Db2 Runtime Client”包,适用于 Windows x64,可从 IBM 网站下载(在我的例子中是版本 11.1.3.3b),我下载的文件名是 v11.1.3fp3b_ntx64_rtcl.exe

这安装在本地位置 "c:\Program Files\IBM\sqllib" 位置(默认)。

我已经在 Windows7 上为其他项目安装了一个可以工作的 gcc(它可能来自 minGW)。

我在 db2cmd.exe 窗口中验证,我可以使用特定端口号和特定凭据通过 CLP(使用 CLI)成功连接到感兴趣的数据库。这样我就知道 Db2-client 安装正确,并且 Db2-server 正在运行,数据库可用,凭据和端口都可以。

以本地管理员身份运行,从 golang.org/dl 下载的 msi 文件安装 go for Windows 到默认位置 c:\go

从https://bitbucket.org/phiggins/db2cli下载phiggins-db2cli-*.zip

创建的本地目录:mkdir %userprofile%\go\src\bitbucket.org\phiggins\db2cli

将phiggins-db2cli-*.zip的内容解压到%userprofile%\go\src\bitbucket.org\phiggins\db2cli

在以管理员身份运行的 db2cmd.exe 窗口中:

cd %userprofile%\go\src\bitbucket.org\phiggins\db2cli

创建了一个批处理文件buildgo.bat,内容如下:

set DB2HOME="C:\program files\ibm\sqllib"

set CGO_LDFLAGS=-L"C:\Program Files\IBM\sqllib\lib"

set CGO_CFLAGS=-I"C:\Program Files\IBM\sqllib\include"

go build .

在以管理员身份运行的 db2cmd 窗口中,运行批处理文件,它在没有错误或错误级别为 0 的消息的情况下完成。

在同一个 db2cmd 窗口中,创建了一个包含https://bitbucket.org/phiggins/db2cli 所示示例程序的文件

我创建的文件名为testgo.go

然后我执行示例程序:

go run testgo.co -conn DATABASE=sample;HOSTNAME=whatever;PORT=60000;UID=whatever;PWD=whatever;

--> 成功获取屏幕上的结果集

【讨论】:

感谢 mao 的回复,我尝试了这些更改。但是包导入和我的邮件类导入之间存在一些冲突,所以我不得不从我的类中删除 phiggins import "bitbucket.org/phiggins/db2cli"。之后如果你知道 sql 就会出现这个问题:unknown driver "db2-cli" (forgotten import?) 太模糊了。编辑您的问题以完整描述您的环境(所有组件的版本),以及您采取的确切步骤,以及您在尝试使用 phiggins db2cli 之前是否证明 Db2 客户端工作正常,以及您是否完全 i> phiggins 给出的示例程序。 我可以在重做上述配置后连接到我的本地 db2 实例。对于远程连接,我遇到了许可证问题,但这与此无关。非常感谢毛。 干得好。如果对您有帮助,请将答案标记为正确。如果远程数据库在 Z/OS 或 i 系列上运行,您需要将相关的许可证文件添加到您的 Db2 客户端。

以上是关于使用 Windows 使用 golang 与 db2 服务器连接的主要内容,如果未能解决你的问题,请参考以下文章

Golang_小程序学golang

Golang管理数据库连接

golang配制高性能sql.DB

Golang在windows与linux的部分区别

Golang在windows与linux的部分区别

windows下golang使用protobuf