使用Gorm操作Oracle數(shù)據(jù)庫踩坑記錄
gorm是目前用得最多的go語言orm庫,但是目前gorm官方并不支持oracle的驅(qū)動,需要用到第三驅(qū)動,最近有個項目要往oracle寫數(shù)據(jù),記錄一下踩到的坑
下載依賴
go get github.com/cengsin/oracle
這個驅(qū)動與最新的gorm庫不匹配,要將gorm降級到1.21版本,不然會出現(xiàn)“......github.com/cengsin/oracle@v1.0.0/oracle.go:53:59: unknown field 'WithReturning' in struct literal of type callbacks.Config” 錯誤
項目結(jié)構(gòu)
包含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 )
運行g(shù)o mod tidy命令生效
定義model類型
假設(shè)數(shù)據(jù)庫里有張商店信息的表shops,包含ID和店名兩個字段,編寫如下model.go文件。其中結(jié)構(gòu)體方法TableName指定改類型對應(yīng)的數(shù)據(jù)表。
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" }
連接數(shù)據(jù)庫
連接名"database/password@127.0.0.1:1521/XE"中database是數(shù)據(jù)庫名,password是密碼,XE是服務(wù)名。LogLevel為logger.Warn會打印大多數(shù)sql語句,設(shè)為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, "\r\n", 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
到此這篇關(guān)于使用Gorm操作Oracle數(shù)據(jù)庫踩坑記錄的文章就介紹到這了,更多相關(guān)Gorm操作Oracle內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Hugo?Config模塊構(gòu)建實現(xiàn)源碼剖析
這篇文章主要為大家介紹了Hugo?Config模塊構(gòu)建實現(xiàn)源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02使用Go基于WebSocket構(gòu)建千萬級視頻直播彈幕系統(tǒng)的代碼詳解
這篇文章主要介紹了使用Go基于WebSocket構(gòu)建千萬級視頻直播彈幕系統(tǒng),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07go redis實現(xiàn)滑動窗口限流的方式(redis版)
這篇文章主要介紹了go redis實現(xiàn)滑動窗口限流的方式(redis版),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12Go語言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解
這篇文章主要為大家介紹了Go語言數(shù)據(jù)結(jié)構(gòu)之插入排序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08