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 訪問。我也會在下面上傳如何通過錢包訪問它,供有需要的初學者使用。