操作系统 : CentOS7.3.1611_x64

go语言版本:1.8.3 linux/amd64

db2版本: db2_v101_linuxx64_expc

问题描述

怎么使用go语言在CentOS环境下操作db2数据库?

解决方案

go语言操作数据库相关信息可以参考如下链接:

https://github.com/golang/go/wiki/SQLDrivers

使用db2cli

db2cli地址: https://bitbucket.org/phiggins/go-db2-cli/src

下载源码,并将源码放到如下路径:

/usr/local/go/src/bitbucket.org/phiggins/go-db2-cli

[root@localhost go-db2-cli]# pwd
/usr/local/go/src/bitbucket.org/phiggins/go-db2-cli
[root@localhost go-db2-cli]# ls
LICENSE mgodbc.go README.md
[root@localhost go-db2-cli]#

这里直接使用bitbucket提供的示例代码 (db2test.go):

package main
// E-Mail : Mike_Zhang@live.com
import (
_ "bitbucket.org/phiggins/go-db2-cli"
"database/sql"
"flag"
"fmt"
"os"
"time"
) var (
connStr = flag.String("conn", "", "connection string to use")
repeat = flag.Uint("repeat", , "number of times to repeat query")
) func usage() {
fmt.Fprintf(os.Stderr, `usage: %s [options] %s connects to DB2 and executes a simple SQL statement a configurable
number of times. Here is a sample connection string: DATABASE=MYDBNAME; HOSTNAME=localhost; PORT=; PROTOCOL=TCPIP; UID=username; PWD=password;
`, os.Args[], os.Args[])
flag.PrintDefaults()
os.Exit()
} func execQuery(st *sql.Stmt) error {
rows, err := st.Query()
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
var t time.Time
err = rows.Scan(&t)
if err != nil {
return err
}
fmt.Printf("Time: %v\n", t)
}
return rows.Err()
} func dbOperations() error {
db, err := sql.Open("db2-cli", *connStr)
if err != nil {
return err
}
defer db.Close()
st, err := db.Prepare("select current timestamp from sysibm.sysdummy1")
if err != nil {
return err
}
defer st.Close() for i := ; i < int(*repeat); i++ {
err = execQuery(st)
if err != nil {
return err
}
}
return nil
} func main() {
flag.Usage = usage
flag.Parse()
if *connStr == "" {
fmt.Fprintln(os.Stderr, "-conn is required")
flag.Usage()
} if err := dbOperations(); err != nil {
fmt.Fprintln(os.Stderr, err)
}
}
[root@localhost db2Test]# ls
build.sh db2Test.go run.sh
[root@localhost db2Test]# ./build.sh
[root@localhost db2Test]# ./run.sh
Time: -- ::21.701142 + UTC
[root@localhost db2Test]#

build.sh :

#!/bin/bash

DB2HOME=/home/db2inst1/sqllib
export CGO_LDFLAGS=-L$DB2HOME/lib
export CGO_CFLAGS=-I$DB2HOME/include go build db2Test.go

run.sh :

#! /bin/bash

DB2HOME=/home/db2inst1/sqllib
export LD_LIBRARY_PATH=$DB2HOME/lib ./db2Test -conn 'DATABASE=testdb; HOSTNAME=127.0.0.1; PORT=50000; PROTOCOL=TCPIP; UID=db2inst1; PWD=123456;'

好,就这些了,希望对你有帮助。

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2017/20171202_使用go语言操作db2.rst

欢迎补充

使用go语言操作db2的更多相关文章

  1. python操作db2和mysql ,ibm_db

    我需要提取mysql和db2的数据进行对比,所以需要用python对其都进行操作. python对mysql进行操作应该没什么问题,就是安装drive后就可以了,在上一篇中有讲安装python-mys ...

  2. Linux C语言操作MySQL

    原文:Linux C语言操作MySQL 1.MySQL数据库简介 MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源.MySQL有以下特性: (1) 使用C和C++编写, ...

  3. Go语言操作MySQL数据库

    Go语言操作MySQL数据库 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用 ...

  4. C语言操作WINDOWS系统存储区数字证书相关函数详解及实例

     C语言操作WINDOWS系统存储区数字证书相关函数详解及实例 以下代码使用C++实现遍历存储区证书及使用UI选择一个证书 --使用CertOpenSystemStore打开证书存储区. --在循环中 ...

  5. 使用Go语言操作MySQL数据库的思路与步骤

    最近在做注册登录服务时,学习用Go语言操作MySQL数据库实现用户数据的增删改查,现将个人学习心得总结如下,另外附有代码仓库地址,欢迎各位有兴趣的fork. 软件环境:Goland.Navicat f ...

  6. 使用C语言操作InfluxDB

    环境: CentOS6.5_x64 InfluxDB版本:1.1.0 InfluxDB官网暂未提供C语言开发库,但github提供的有: https://github.com/influxdata/i ...

  7. c语言操作mysql数据库

    c语言操作Mysql数据库,主要就是为了实现对数据库的增.删.改.查等操作,操作之前,得先连接数据库啊,而连接数据库主要有两种方法.一.使用mysql本身提供的API,在mysql的安装目录中可可以看 ...

  8. 39.C语言操作数据库

    一.准备工作: sqlite3工具集:链接:https://pan.baidu.com/s/1mjufXZa 密码:2ui7 安装步骤: 打开如下文件夹,找到sqlite3.dll,并放入系统目录 2 ...

  9. go语言操作kafka

    go语言操作kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能.持久化.多副本备份.横向扩展等特点.本文介绍了如何使用Go语言发送和 ...

随机推荐

  1. BBC记录片之非洲4

  2. Mac 下 Redis 5.0 的卸载与安装

    卸载 停止 redis 服务器 redis-cli shutdown 检测 #检测后台进程是否存在 ps -ef |grep redis #检测6379端口是否在监听 netstat -lntp | ...

  3. pyinstaller将py文件转成exe格式

    首先要注意一下:打包python文件成exe格式这个过程只能在windows环境下运行 1. 直接在命令行用pip安装 pyinstaller pip install pyinstaller 2. 下 ...

  4. Redis与Zookeeper实现分布式锁的区别

    Redis实现分布式锁 1.根据lockKey区进行setnx(set not exist,如果key值为空,则正常设置,返回1,否则不会进行设置并返回0)操作,如果设置成功,表示已经获得锁,否则并没 ...

  5. [转] Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程

    一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合 ...

  6. node.js认识及学习资料

    2011年阿里就已经开始在生产环境中使用nodejs. 阿里的技术栈中,Java是最核心的,Nodejs扮演怎样的一个角色? 1. 基础设施大部分采用Java实现,变化较少,有事务要求的Busines ...

  7. AOJ 2249 Road Construction (dijkstra)

    某国王需要修路,王国有一个首都和多个城市,需要修路.已经有修路计划了,但是修路费用太高. 为了减少修路费用,国王决定从计划中去掉一些路,但是需要满足一下两点: 保证所有城市都能连通 所有城市到首都的最 ...

  8. asp.net core 微信APP支付(扫码支付,H5支付,公众号支付,app支付)之4

    微信app支付需要以下参数,类封装如下 public class WxPayModel { /// <summary> /// 应用ID /// </summary> publ ...

  9. 第一次亲密接触MSF

    第一次亲密接触MSF Metasploit Framework介绍 Metasploit是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新.被安全社区冠以“可以黑掉整个宇宙”之名的强 ...

  10. JAVA编码 —— 字符串关键字内容替换

    前言 工作中,我们可能遇到字符串内容替换的场景.例如:我们需要将一个字符串凡是 “#” 标注的,分别替换为不同的内容,那我们应该怎么做呢? 分析,一个字符串可能含有多个“#”,每个 “#”又对应不同的 ...