`

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>

分享到:
评论

相关推荐

    数据库面试问题.doc

    MySQL和Oracle是两种不同的数据库管理系统。Oracle是一种大型数据库管理系统,市场占有率达40%,而MySQL是一种中小型数据库管理系统,市场占有率只有20%左右。Oracle价格非常高,而MySQL是开源的。Oracle支持大并发...

    收集各大厂使用数量400+框架、技术、工具,包含前端、移动端、后端、大数据、数据库

    数据库方面,关系型数据库如MySQL、Oracle和PostgreSQL仍然广泛使用,NoSQL数据库如MongoDB、Cassandra和Redis则在处理非结构化数据和高性能场景中受到青睐。NewSQL数据库如TiDB和Google Spanner则在保持ACID特性的...

    sql表关系.txt

    索引:快速访问数据库表的特定信息,索引是对数据库表一列和多列的值进行排序的一种数据结构。 DDL:数据定义语言:定义数据库对象:创建库,表,列等。 DML:数据操作语言:用来操作数据库表中的记录。 DQL:...

    注意:涵盖Java相关技术堆栈

    在IT行业中,Java和Golang是两种非常重要的编程语言,它们各自有着独特的特性和应用场景。本文将深入探讨这两个技术栈,旨在提供一个全面的理解,帮助读者掌握相关知识。 首先,让我们从Java开始。Java是一种面向...

    分布式能源岗位职责任职要求.docx

    - 熟悉主流关系型数据库系统如MySQL、Oracle、OceanBase的架构和运维。 - 熟练使用k8s、Docker、Ansible、Git、Prometheus、Falcon等工具之一或多者。 **岗位亮点:** - 分布式关系型数据库系统Blade是基础架构...

    vuls:适用于Linux,FreeBSD,容器,WordPress,编程语言库,网络设备的无代理漏洞扫描程序

    系统管理员将必须不断注意NVD(国家漏洞数据库)或类似数据库中的任何新漏洞。 如果服务器中安装了大量软件包,则系统管理员可能无法监视所有软件。 执行分析以确定受新漏洞影响的服务器是昂贵的。 在分析过程中...

Global site tag (gtag.js) - Google Analytics