由于Oracle通常用于大型企业和特定行业而且具有独特的特性和复杂性,golang
中我们比较易用的gorm
,ent
,xorm
等orm库都不支持。本文选择了较为成熟的驱动库:github.com/godror/godror
,该库相对sijms/go-ora
较为复杂,运行时需要依赖环境。
如图所示,godror
虽然在编译时只需要安装 gcc
(该过程本文不再演示),但在运行时却需要依赖 ODPI-C。一番折腾下来还是有些繁琐,本文将整个操作步骤记录下来,与需要的 Go 开发者分享。
说明文档:[2. Installing ODPI-C ](https://odpi-c.readthedocs.io/en/latest/user_guide/installation.html)
下载地址:Oracle Instant Client Downloads
说明:
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
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
后已经可以正常使用
前言中提到,Oracle 数据库在 Go 语言中的使用相对复杂,尤其是对于新手开发者而言。通过使用 godror
驱动库,我们可以更方便地与 Oracle 数据库进行交互。本文详细记录了安装和配置的步骤,确保开发者能够顺利完成环境搭建。
在安装 ODPI-C 的过程中,Windows 和 Linux(Ubuntu)的步骤有所不同。Windows 用户需要下载并解压 Oracle Instant Client,并配置相应的环境变量。而 Linux 用户则需要下载相应的包,解压后同样配置环境变量。此外,Linux 用户还需注意安装 libaio1
,以避免连接时出现错误。
在驱动使用部分,我们提供了一个简单的示例代码,展示了如何通过 godror
连接到 Oracle 数据库并执行查询。通过运行 go run main.go
,开发者可以验证连接是否成功,并查看查询结果。
总结而言,虽然使用 godror
操作 Oracle 数据库的过程较为繁琐,但通过本文的指导,开发者可以更轻松地完成环境准备和代码实现,从而专注于业务逻辑的开发。希望本文能为需要的 Go 开发者提供帮助。