使用golang连接Oracle数据库
示例代码
package main
import (
"fmt"
"github.com/cengsin/oracle"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"log"
"os"
"time"
)
type Area struct {
ID int `gorm:"column:ID"`
Name string `gorm:"column:NAME"`
}
func (Area) TableName() string {
return "T_AREA"
}
func main() {
log.Println("initial database connect……")
db, err := gorm.Open(oracle.Open("wateruser/Sa123456@127.0.0.1:1521/ORCL"), &gorm.Config{
Logger: logger.New(log.New(os.Stdout, "\r\n", log.LstdFlags), logger.Config{
SlowThreshold: 2 * time.Millisecond,
LogLevel: logger.Warn, //打印级别
Colorful: true,
}),
//SkipDefaultTransaction: true,
})
if err != nil {
log.Fatalln(err)
}
area := make([]Area, 0, 1)
res := db.Find(&area)
if res.Error != nil {
fmt.Println(res.Error)
}
fmt.Println(area)
}
分别拉取两个依赖或者直接执行go mod tidy
go get gorm.io/gorm
go get github.com/cengsin/oracle
注意
go的版本在1.18以上会报错
# github.com/godror/godror
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:479:19: undefined: VersionInfo
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:480:19: undefined: VersionInfo
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:481:30: undefined: ObjectType
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:482:31: undefined: Event
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:482:42: undefined: SubscriptionOption
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:482:64: undefined: Subscription
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:483:10: undefined: StartupMode
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:484:11: undefined: ShutdownMode
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:485:59: undefined: Data
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:488:18: undefined: PoolStats
..\..\gopath\pkg\mod\github.com\godror\godror@v0.20.0\orahlp.go:488:18: too many errors
如果是使用的goland的话,在创建项目时选择go的sdk为1.8即可,这个设置只会对当前项目生效,对系统中go的sdk版本无影响
gorm高版本也会出现错误
......github.com/cengsin/oracle@v1.0.0/oracle.go:53:59: unknown field 'WithReturning' in struct literal of type callbacks.Config”
可以在go.mod文件中将gorm的版本改为1.21,然后执行
go mod tidy
gcc
如果你的电脑系统中没有gcc,会报错
# github.com/godror/godror
cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%
这是需要安装gcc,(这里建议看完gcc这一部分再操作!!!)
安装方式一:
点击下面网址即可打开
MinGW-w64 - for 32 and 64 bit Windows - Browse /mingw-w64 at SourceForge.net
然后点击在线安装
然后打开软件,这一步需要选择与电脑对应的版本(这一界面在打开软件点击一次next后)
然后下一步选择你的安装位置
这时可能会报错
这一版是由于网络导致的,可以采用科学上网解决,也可以不选择在线安装,直接下载对应版本,这一过程可能会很慢
安装方式二:
仍然是这个网址
MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net
我选择的版本是
这个版本我上传到了百度网盘,
链接:pan.baidu.com/s/1PZcT6Mtq… 提取码:fzvh --来自百度网盘超级会员V3的分享
里面有两个文件,下载一个即可。官方的文件压缩格式是.7z,而win11只能默认解压.zip,我就一起上传了,但是.7z的文件只有47M,.zip有132M
下载后解压放到一个文件夹,并进入bin目录,复制文件路径
添加到环境变量中:此电脑(右键)-属性-高级系统设置-环境变量-(双击)path-新建,然后一路确认即可
添加完成后执行
gcc -v
出现版本号则添加成功
成功
再次运行程序,成功
测试的时候我还发现gorm的first查询不支持Oracle数据库 最后再吐槽一下掘金这个本地md文件上传时图片无法一起上传的问题,图片文件需要自己一张一张的上传