项目作者: y-okubo

项目描述 :
Go development environment with DB2
高级语言:
项目地址: git://github.com/y-okubo/golang-db2.git
创建时间: 2018-04-05T04:42:12Z
项目社区:https://github.com/y-okubo/golang-db2

开源协议:

下载


Build docker image

  1. $ docker build --no-cache -t golang-db2 .

Run docker container

  1. $ docker run --rm -it -e DB2INST1_PASSWORD=x6HqUEKS -e LICENSE=accept -v "$PWD":/tmp/share -p 8080:8080 -p 50000:50000 golang-db2 /bin/bash --login

Create sample database (in container)

  1. $ su - db2inst1
  2. $ db2start
  3. $ db2sampl
  4. $ logout

Create sample program (in container)

  1. $ vi ~/go/src/main.go
  2. $ cd ~/go/src
  3. $ go run main.go -conn 'DATABASE=SAMPLE; HOSTNAME=localhost; PORT=50000; PROTOCOL=TCPIP; UID=db2inst1; PWD=x6HqUEKS;'

Sample program code

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