操作系统 : 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

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

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

  1. package main
  2. // E-Mail : Mike_Zhang@live.com
  3. import (
  4. _ "bitbucket.org/phiggins/go-db2-cli"
  5. "database/sql"
  6. "flag"
  7. "fmt"
  8. "os"
  9. "time"
  10. )
  11.  
  12. var (
  13. connStr = flag.String("conn", "", "connection string to use")
  14. repeat = flag.Uint("repeat", , "number of times to repeat query")
  15. )
  16.  
  17. func usage() {
  18. fmt.Fprintf(os.Stderr, `usage: %s [options]
  19.  
  20. %s connects to DB2 and executes a simple SQL statement a configurable
  21. number of times.
  22.  
  23. Here is a sample connection string:
  24.  
  25. DATABASE=MYDBNAME; HOSTNAME=localhost; PORT=; PROTOCOL=TCPIP; UID=username; PWD=password;
  26. `, os.Args[], os.Args[])
  27. flag.PrintDefaults()
  28. os.Exit()
  29. }
  30.  
  31. func execQuery(st *sql.Stmt) error {
  32. rows, err := st.Query()
  33. if err != nil {
  34. return err
  35. }
  36. defer rows.Close()
  37. for rows.Next() {
  38. var t time.Time
  39. err = rows.Scan(&t)
  40. if err != nil {
  41. return err
  42. }
  43. fmt.Printf("Time: %v\n", t)
  44. }
  45. return rows.Err()
  46. }
  47.  
  48. func dbOperations() error {
  49. db, err := sql.Open("db2-cli", *connStr)
  50. if err != nil {
  51. return err
  52. }
  53. defer db.Close()
  54. st, err := db.Prepare("select current timestamp from sysibm.sysdummy1")
  55. if err != nil {
  56. return err
  57. }
  58. defer st.Close()
  59.  
  60. for i := ; i < int(*repeat); i++ {
  61. err = execQuery(st)
  62. if err != nil {
  63. return err
  64. }
  65. }
  66. return nil
  67. }
  68.  
  69. func main() {
  70. flag.Usage = usage
  71. flag.Parse()
  72. if *connStr == "" {
  73. fmt.Fprintln(os.Stderr, "-conn is required")
  74. flag.Usage()
  75. }
  76.  
  77. if err := dbOperations(); err != nil {
  78. fmt.Fprintln(os.Stderr, err)
  79. }
  80. }
  1. [root@localhost db2Test]# ls
  2. build.sh db2Test.go run.sh
  3. [root@localhost db2Test]# ./build.sh
  4. [root@localhost db2Test]# ./run.sh
  5. Time: -- ::21.701142 + UTC
  6. [root@localhost db2Test]#

build.sh :

  1. #!/bin/bash
  2.  
  3. DB2HOME=/home/db2inst1/sqllib
  4. export CGO_LDFLAGS=-L$DB2HOME/lib
  5. export CGO_CFLAGS=-I$DB2HOME/include
  6.  
  7. go build db2Test.go

run.sh :

  1. #! /bin/bash
  2.  
  3. DB2HOME=/home/db2inst1/sqllib
  4. export LD_LIBRARY_PATH=$DB2HOME/lib
  5.  
  6. ./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. python 全栈开发,Day116(可迭代对象,type创建动态类,偏函数,面向对象的封装,获取外键数据,组合搜索,领域驱动设计(DDD))

    昨日内容回顾 1. 三个类 ChangeList,封装列表页面需要的所有数据. StarkConfig,生成URL和视图对应关系 + 默认配置 AdminSite,用于保存 数据库类 和 处理该类的对 ...

  2. Linux学习笔记:使用shell脚本实现ftp的自动上传下载

    在 Linux 下可以利用 Shell 实现 ftp 文件的自动上传和下载,封装至 crontab 更可实现定时调度. 1.ftp自动登录批量下载文件 ##### 从ftp服务器上的/home/dat ...

  3. Spring之配置文件bean作用域的详细介绍

    Spring的配置文件applicationContext.xml中bean作用域的详细介绍: 1:对象的创建:单例和多例        scope="singleton",默认值 ...

  4. AOJ 2170 Marked Ancestor[并查集][离线]

    题意: 给你一颗N个节点的树,节点编号1到N.1总是节点的根.现在有两种操作: M v: 标记节点v Q v: 求出离v最近的标记的相邻节点.根节点一开始就标记好了. 现在给一系列操作,求出所有Q操作 ...

  5. ubuntu16.04下搜狗输入法异常

    问题描述: 搜狗输入法出现异常, 提示: 删除 .config/Sougou-PY 文件后重启 解决方案: google后发现,搜狗拼音输入法使用 fcitx 框架. 发现系统同时安装了ibus框架 ...

  6. BZOJ1078 [SCOI2008]斜堆 堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1078 题意概括 斜堆(skew heap)是一种常用的数据结构.它也是二叉树,且满足与二叉堆相同的 ...

  7. win10 更新之后,无法开启wifi,“组或资源的状态不是执行请求操作的正确状态”

    netsh wlan netsh wlan start hostednetwork 请参考最新博客:http://www.cnblogs.com/tanrong/p/8184325.html 已尝试解 ...

  8. ARIMA模型---时间序列分析---温度预测

    (图片来自百度) 数据 分析数据第一步还是套路------画图 数据看上去比较平整,但是由于数据太对看不出具体情况,于是将只取前300个数据再此画图 这数据看上去很不错,感觉有隐藏周期的意思 代码 # ...

  9. Openvas安装

    Openvas简介 Openvas是开源的,是Nessus项目分支,用于管理目标系统的漏洞,检测目标网络或主机的安全性.它的评估能力来源于数万个漏洞测试程序,openvas 早起版本还有一个客户端,现 ...

  10. 【*】CAS 是什么,Java8是如何优化 CAS 的

    文章结构 前言 想要读懂 Java 中的并发包,就是要先读懂 CAS 机制,因为 CAS 是并发包的底层实现原理.本文主要讨论  CAS 是如何保证操作的原子性的  Java8 对 CAS 进行了哪些 ...