使用go語言操作db2

来源:http://www.cnblogs.com/MikeZhang/archive/2017/12/02/goOptIBMDB20171202.html
-Advertisement-
Play Games

操作系統 : CentOS7.3.1611_x64 go語言版本:1.8.3 linux/amd64 db2版本: db2_v101_linuxx64_expc 問題描述 怎麼使用go語言在CentOS環境下操作db2資料庫? 解決方案 go語言操作資料庫相關信息可以參考如下鏈接: https:// ...


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

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", 1, "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=60000; PROTOCOL=TCPIP; UID=username; PWD=password;
`, os.Args[0], os.Args[0])
    flag.PrintDefaults()
    os.Exit(1)
}

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 := 0; 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: 2017-09-25 22:41:21.701142 +0000 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

歡迎補充


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設想從一大群選手中挑選人員組建一支隊伍,每名選手都擁有特定的技能組合。目標是組建出一隻最小的隊伍,使得隊伍整體擁有一組特定的技能組合。也就是說,對於隊伍整體所需要的技能,隊伍中至少有一名選手必須擁有這項技能。假定S為隊伍所必須擁有的技能集合,P為所有待選選手的技能集合。從P中挑選出一些技能組合以構成... ...
  • 看見頭文件中的條件編譯就犯怵,不知什麼意思,但是,師傅說:”就得那麼寫“,我照做,但是知其然而不知其所以然。 好吧,我承認自己只是一個代碼的搬運工,哦,不,或許還談不上。 下麵是學習後自己的理解~~~ 代碼: 也許我渣把,總之,之前我確實不會。 解釋: 第1、2行和第14行:防止重覆定義。 如果兩個 ...
  • import time# print(help(time)) # 顯示time模塊全文本# Functions: # 執行結果 # time() -- return current time in seconds since the Epoch as a float # 以浮點數返回以秒計算的從19 ...
  • Mojo: Maven plain Old Java Object 1、插件命名規則:maven-<yourplugin>-plugin是Maven的保留欄位,不允許使用,我們可以用<myplugin>-maven-plugin來命名自己開發的插件。 2、自定義插件代碼,註意pom文件的packag ...
  • java學習資料,僅供學習交流,自行取用↓ 鏈接:https://pan.baidu.com/s/1dF1wCST 密碼:i75g ...
  • 創建原型模板 1、在空目錄運行archetype:generate上面的命令,待下載完必要的jar包後,首先需要輸入內置的原型編號; 2、輸入任意編號後,繼續下載必要jar包,之後要求分別輸入groupId,artifactId,version,package,並確認 3、瀏覽Maven工程 4、內 ...
  • 在php官方文檔里有這麼一段: 代碼輸出結果如下: I am bar.I am bar.. 結果輸出了: I am bar.I am bar.you yyy. 確認 $foo->$baz[2] 即為 $foo->baz, 同理 $foo->$baz[1] 即 $foo->bar, 那麼第八行這裡 $ ...
  • 首先要說的是django與其他的框架不同,django是一個封裝的及其完善的框架,我們使用django也不會像之前寫學生系統那樣,django操作資料庫使用自帶的ORM來進行操作,Torando與Flask的資料庫使用就很自由(當然也可以使用我們之前的SQL helper),並且Flask的模板都不 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...