gorm是目前用得最多的go语言orm库,但是目前gorm官方并不支持oracle的驱动,需要用到第三驱动,最近有个项目要往oracle写数据,记录一下踩到的坑
下载依赖
go get github.com/cengsin/oracle
这个驱动与最新的gorm库不匹配,要将gorm降级到1.21版本,不然会出现“……github.com/cengsin/oracle@v1.0.0/oracle.go:53:59: unknown field 'withreturning' in struct literal of type callbacks.config” 错误
项目结构
包含main.go和一个model目录。
|——oracle_test | |——model | |——model.go | |——main.go | |——go.mod
编辑go.mod将gorm降级
module oracle_test go 1.16 require ( github.com/cengsin/oracle v1.0.0 gorm.io/gorm v1.21.16 )
运行go mod tidy命令生效
定义model类型
假设数据库里有张商店信息的表shops,包含id和店名两个字段,编写如下model.go文件。其中结构体方法tablename指定改类型对应的数据表。
package model type shopinfo struct { shopid string `gorm:"column:shopid;not null"` shopname string `gorm:"column:shopname;not null"` } func (s *shopinfo) tablename() string { return "shops" }
连接数据库
连接名"database/password@127.0.0.1:1521/xe"中database是数据库名,password是密码,xe是服务名。loglevel为logger.warn会打印大多数sql语句,设为logger.error只会打印运行出错的sql语句。
package main import ( "fmt" "log" "os" "time" "oracle_test/model" "github.com/cengsin/oracle" "gorm.io/gorm" "gorm.io/gorm/logger" ) func test() { log.println("initial database connect……") db, err := gorm.open(oracle.open("database/password@127.0.0.1:1521/xe"), &gorm.config{ logger: logger.new(log.new(os.stdout, "rn", log.lstdflags), logger.config{ slowthreshold: 1 * time.millisecond, loglevel: logger.warn, //打印级别 colorful: true, }), //skipdefaulttransaction: true, }) if err != nil { log.fatalln(err) } if e := db.automigrate(&model.shopinfo{}); e != nil { log.fatalln(e.error()) } shopinfo := new(model.shopinfo) db.first(shopinfo) fmt.print(*shopinfo) }
测试运行
go run ./main.go
到此这篇关于使用gorm操作oracle数据库踩坑记录的文章就介绍到这了,更多相关gorm操作oracle内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!
需要了解更多数据库技术:使用Gorm操作Oracle数据库踩坑记录,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/dtteaching/1105484.html