侧边栏壁纸
  • 累计撰写 48 篇文章
  • 累计创建 7 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

【Golang】godror驱动操作Oracle数据库--开发环境篇

Administrator
2025-01-13 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

前言

由于Oracle通常用于大型企业和特定行业而且具有独特的特性和复杂性,`golang`中我们比较易用的`gorm`,`ent`,`xorm`等orm库都不支持。本文选择了较为成熟的驱动库:`github.com/godror/godror`,该库相对`sijms/go-ora`较为复杂。

目的

如图所示,`godror`虽然在编译时只需要安装 `gcc`(该过程本文不再演示),但在运行时却需要依赖 ODPI-C。一番折腾下来还是有些繁琐,本文将整个操作步骤记录下来,与需要的 Go 开发者分享。

安装ODPI-C

说明文档:[2. Installing ODPI-C ](https://odpi-c.readthedocs.io/en/latest/user_guide/installation.html)

下载地址:Oracle Instant Client Downloads

windows

+ 下载

  • 解压

  • 配置环境变量

说明:

Linux(Ubuntu)

+ 下载包

  • 解压
root@DESKTOP-BB0KRFQ:/home/oracle# ls
instantclient-basic-linux.x64-23.5.0.24.07.zip
root@DESKTOP-BB0KRFQ:/home/oracle# unzip instantclient-basic-linux.x64-23.5.0.24.07.zip
  • 配置环境变量
root@DESKTOP-BB0KRFQ:/mnt/c/Users/Administrator# vim ~/.bashrc

添加

export LD_LIBRARY_PATH=/home/oracle/instantclient_23_5:$LD_LIBRARY_PATH

使更改生效

source ~/.bashrc

依然报错

ERRO[0000] dbes                                          dsn="test/test123@20.10.120.190:21521/helowin" err="ORA-00000: DPI-1047: Cannot locate a 64-bit Oracle Client library: \"libaio.so.1: cannot open shared object file: No such file or directory\". See https://oracle.github.io/odpi/doc/installation.html#linux for help" fields.msg="连接失败" log_file="/mnt/d/projects/dbes/backend/internal/apiserver/store/database/driver/driver.go:52"

根据报错和查看oracle官网可知,还需要安装libaio1

apt-get update
apt-get install -y libaio1

驱动使用

```plain github.com/godror/godror ```

代码:

package main

import (
    "database/sql"
    "fmt"
    "log"

    _ "github.com/godror/godror"
)

func main() {
    // 数据库连接字符串
    dsn := "user/password@host:port/service_name"

    // 连接到数据库
    db, err := sql.Open("godror", dsn)
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    // 测试连接
    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("成功连接到 Oracle 数据库!")

    // 执行查询
    rows, err := db.Query("SELECT column_name FROM table_name")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    // 处理查询结果
    for rows.Next() {
        var columnValue string
        if err := rows.Scan(&columnValue); err != nil {
            log.Fatal(err)
        }
        fmt.Println(columnValue)
    }

    // 检查查询过程中是否发生错误
    if err := rows.Err(); err != nil {
        log.Fatal(err)
    }
}

运行go run main.go后已经可以正常使用

总结

使用`godror`库操作`Oracle`时由于使用了 Oracle Instant Client 和 C 语言库在编译运行时较为复杂,本文给出操作说明,方便参考简化环境准备。

0

评论区