go - DB2 AS/400 使用 Go 进行查询

标签 go db2 odbc ibm-midrange db2-400

我正在尝试将 Golang 与 AS/400 DB2 数据库连接起来,我在机器上安装了 iSeries Access 驱动程序,这是现在的代码:

package main

import (
    "odbc"
)

func main() {
    conn, _ := odbc.Connect("DSN=DSN/SCHEME;UID=USER;PWD=PASS")
    stmt, _ := conn.Prepare("SELECT * FROM SCHEME.TABLE")
    stmt.Execute()
    rows, _ := stmt.FetchAll()
    for i, row := range rows {
        println(i, row)
    }
    stmt.Close()
    conn.Close()
}

我能够在 ODBC 驱动程序上使用 Python 和 DSN-Less 配置来做到这一点,就像这样:

con = pyodbc.connect('DRIVER=iSeries Access ODBC Driver;SYSTEM=DSN;UID=USR;PWD=PASS;DBQ=PRUEBA')

我尝试在 Golang 上使用 odbc、mgodbc 和 db2cli,总是遇到无效内存地址或 nil 指针取消引用错误。

感谢任何帮助,谢谢!

最佳答案

更新 – bitbucket.org/phiggins/db2cli现已列于https://github.com/golang/go/wiki/SQLDrivers


我们正在使用 bitbucket.org/phiggins/db2cli ,它基于出色的code.google.com/p/odbc 库,并且运行良好!

package main

import (
    "database/sql"
    "log"
    "time"

    _ "bitbucket.org/phiggins/db2cli"
)

func main() {
    db, err := sql.Open("db2-cli", "DATABASE=testdb; HOSTNAME=db2.domain.com; PORT=1234; PROTOCOL=TCPIP; UID=user1; PWD=password1;")
    if err != nil {
        log.Fatalln(err)
    }
    defer db.Close()
    var t time.Time
    row := db.QueryRow("SELECT current date FROM sysibm.sysdummy1;")
    err = row.Scan(&t)
    if err != nil {
        log.Fatalln(err)
    }
    log.Println(t)
}

关于go - DB2 AS/400 使用 Go 进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24938867/

相关文章:

go - 如何从 Golang 中的结构访问特定字段

sql - 与 AS400 的最新日期

sql - 如何将SQL数据加载到Hortonworks中?

mysql - 某些机器上的 E_FAIL 状态,其他机器上没有

pointers - 如何在 Go 中存储对操作结果的引用?

go - 修改 Golang 内部文件?

go - 如何从html上传目录到golang服务器?

linux - 包含 '$' 的 db2 命令行处理器和密码

Java 使用准备好的语句调用用户定义表函数 DB2

java - "[Microsoft][ODBC Driver Manager] Invalid string or buffer length"错误