php小編百草在這里為大家解答一個常見問題:“為什么從golang連接Oracle數據庫失敗?”在使用golang連接Oracle數據庫時,有時會遇到連接失敗的問題。這可能是由于多種原因引起的,例如數據庫配置錯誤、網絡連接問題或者驅動程序不兼容等。本文將詳細分析可能的原因,并提供解決方案,幫助讀者解決這個問題,讓連接Oracle數據庫的過程更加順利。
問題內容
dsn := `
user=admin,
password=temp1!a,
(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-seoul-1.oraclecloud.com))(connect_data=(service_name=gee9edfb93f3cf6_redglqweyxqefhhf_high.adb.oraclecloud.com))(security=(ssl_server_cert_dn="cn=adb.ap-seoul-1.oraclecloud.com, ou=oracle adb seoul, o=oracle corporation, l=redwood city, st=california, c=us")))
`
db, err := sql.open("godror", dsn)
if err != nil {
fmt.println(err)
return
}
defer db.close()
登錄后復制
我創建了一個自治數據庫,我嘗試在golang中用上面的代碼連接,但是無法連接,出現以下錯誤,如何連接,我找不到詳細的手冊,你能幫我嗎?
go run main.go parsing parameters "user=ADMIN,\n\tpassword=temp1!a,\n\t(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-seoul-1.oraclecloud.com))(connect_data=(service_name=gee9edfb93f3cf6_redglqweyxqefhhf_high.adb.oraclecloud.com))(security=(ssl_server_cert_dn=\"CN=adb.ap-seoul-1.oraclecloud.com, OU=Oracle ADB SEOUL, O=Oracle Corporation, L=Redwood City, ST=California, C=US\")))": logfmt syntax error at pos 44 on line 3: unexpected '='
登錄后復制
解決方法
我是oracle和golang的新用戶,一切都是新的,我很難找到連接oracle和golang的文檔。有手冊,但我不太明白。
如果您在 stackoverflow 上發布問題,答案只是手冊的鏈接。對于初學者來說,體驗新環境確實很困難
我終于找到了解決方案,我的代碼如下。即使您看不懂代碼,在查看示例時一一思考也會很好。
package main
import (
"database/sql"
"fmt"
go_ora "github.com/sijms/go-ora/v2"
)
type DbInfo struct {
Username string
Password string
}
func main() {
serverInfo := DbInfo{
Username: "databaseUser",
Password: "databaseUserPassword",
}
urlOptions := map[string]string{
"TRACE FILE": "trace.log",
"SSL VERIFY": "FALSE",
}
connectString := "(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-seoul-1.oraclecloud.com))(connect_data=(service_name=gvsd1dfc9c3cdf6_racc7y8cxsvb16f0z_medium.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))"
db, err := sql.Open("oracle", go_ora.BuildJDBC(serverInfo.Username, serverInfo.Password, connectString, urlOptions))
if err != nil {
panic(err.Error())
}
defer db.Close()
r, err := db.Exec(`create table users (
nickname varchar(20)
)`)
if err != nil {
panic(err.Error())
}
fmt.Println(r.LastInsertId())
}
登錄后復制
上面的代碼不需要錢包來進行 tls 訪問。我也會在下面上傳如何通過錢包訪問它,供有需要的初學者使用。






