`

Golang连接Oracle数据库两种方式

阅读更多

Golang连接Oracle 需要安装Oracle Full Client或Instant Client 驱动程序

Linux安装Golang Oracle数据库驱动程序

MacBook安装Golang Oracle数据库驱动程序

方式一

使用go get github.com/mattn/go-oci8

在GoPath的src目录下创建oracleoci8.go,内容如下:

  1. package main
  2. import(
  3. "database/sql"
  4. "fmt"
  5. _ "github.com/mattn/go-oci8"
  6. "log"
  7. "os"
  8. )
  9. func main(){
  10. if len(os.Args)!=2{
  11. log.Fatalln(os.Args[0]+" user/password@host:port/sid")
  12. }
  13. fmt.Println(os.Args[1])
  14. db, err := sql.Open("oci8", os.Args[1])
  15. if err !=nil{
  16. log.Fatalln(err)
  17. }
  18. defer db.Close()
  19. //查询用户
  20. rows, err := db.Query("select user from dual")
  21. if err !=nil{
  22. log.Fatalln(err)
  23. }
  24. defer rows.Close()
  25. for rows.Next(){
  26. var data string
  27. rows.Scan(&data)
  28. fmt.Println(data)
  29. }
  30. if err = rows.Err(); err !=nil{
  31. log.Fatalln(err)
  32. }
  33. //查询ZHUJI表的code字段
  34. rows2, err := db.Query("SELECT code FROM ZHUJI")
  35. if err !=nil{
  36. log.Fatalln(err)
  37. }
  38. defer rows2.Close()
  39. for rows2.Next(){
  40. var data string
  41. rows2.Scan(&data)
  42. fmt.Println(data)
  43. }
  44. if err = rows2.Err(); err !=nil{
  45. log.Fatalln(err)
  46. }
  47. }

运行

  1. #直接运行
  2. go run oracleoci8.go liang/liang@192.168.0.4:1521/orcl
  3. #或者先编译成二进制,在运行二进制文件
  4. go build oracleoci8.go
  5. ./oracleoci8 liang/liang@192.168.0.4:1521/orcl

方式二

使用go get github.com/godror/godror

在GoPath的src目录下创建oracledror.go,内容如下:

  1. package main
  2. import(
  3. "database/sql"
  4. "encoding/json"
  5. "fmt"
  6. _ "github.com/godror/godror"
  7. )
  8. func main(){
  9. db, err := sql.Open("godror",`user="liang" password="liang" connectString="192.168.0.4:1521/orcl"`)
  10. if err !=nil{
  11. panic(err)
  12. }
  13. err = db.Ping()
  14. if err !=nil{
  15. panic(err)
  16. }
  17. //查询ZHUJI表中code='pt'的sql:SELECT * FROM ZHUJI where CODE = 'pt'
  18. sqlStatement :="SELECT * FROM ZHUJI where CODE = :1"
  19. stmt, err := db.Prepare(sqlStatement)
  20. defer stmt.Close()
  21. if err !=nil{
  22. panic(err)
  23. }
  24. rows, err := stmt.Query("pt")//输入sql中对应参数的值
  25. if err !=nil{
  26. panic(err)
  27. }
  28. defer rows.Close()//defer关闭查询连接
  29. //获取列相关信息
  30. strings, _ := rows.Columns()
  31. for i :=0; i < len(strings); i++{
  32. fmt.Print(" ", strings[i])
  33. }
  34. fmt.Print("\n")
  35. //构造切片存储json
  36. var slice []map[string]interface{}
  37. var m1 map[string]interface{}
  38. m1 = make(map[string]interface{})
  39. var CODE, OVALUE1, OVALUE2 string
  40. for rows.Next(){
  41. rows.Scan(&CODE,&OVALUE1,&OVALUE2)//写入查询数据集的所有列名称
  42. fmt.Printf("code is %s, OVALUE1 is %s\n", CODE, OVALUE1)
  43. m1["CODE"]= CODE
  44. m1["OVALUE1"]= OVALUE1
  45. m1["OVALUE2"]= OVALUE2
  46. slice = append(slice, m1)//分片中追加信息
  47. }
  48. if err = rows.Err(); err !=nil{
  49. // handle the error here
  50. }
  51. defer stmt.Close()
  52. data, err := json.Marshal(slice)
  53. if err !=nil{
  54. fmt.Printf("序列化错误 err = %v\n", err)
  55. }
  56. //输出序列化后的结果 json字符串
  57. fmt.Printf("序列化后 = %v\n",string(data))
  58. }

运行

  1. #直接运行
  2. go run oracledror.go
  3. #或者先编译成二进制,在运行二进制文件
  4. go build oracledror.go
  5. ./oracledror

<audio controls="controls" style="display: none;"></audio>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics