Golang使用JDBC或ODBC或者是什么连接类型
问题描述:
去版本go1.8.1窗/ amd64和我进口Golang使用JDBC或ODBC或者是什么连接类型
"github.com/mattn/go-oci8"
"database/sql"
为了连接到我的Oracle数据库。在这里,当我给数据库的用户名,密码,端口和表名在连接字符串
func openAndConnectToDb(sbconfig ConnectorConfig) *sql.DB {
logger := sbgoclient.Log
logger.Println("Open the database")
// oraprop := LoadConfig("oraproperties.yml")
fmt.Println("Load config complete")
orrrr := sbconfig.DB_Username + "/" + sbconfig.DB_Password + "@" + "//" + sbconfig.DB_Ip + ":" + sbconfig.DB_Port + "/" + sbconfig.DB_Schema
fmt.Println("orrr formed: ", orrrr)
db, err := sql.Open(sbconfig.DbType, orrrr)
if err != nil {
logger.Println("database connection failed...")
logger.Fatal(err)
}
//Use a backoff/retry strategy - we can start this client before
//the database is started, and see it eventually connect and process
//queries
var dbError error
maxAttempts := 20
for attempts := 1; attempts <= maxAttempts; attempts++ {
logger.Println("pinging database...")
dbError = db.Ping()
if dbError == nil {
logger.Println("database ping successfull........")
fmt.Println("database ping successfull........")
break
}
logger.Println("Ping failed: ", dbError, "retry in ", attempts, " seconds.")
time.Sleep(time.Duration(attempts) * time.Second)
}
if dbError != nil {
logger.Fatal(dbError)
}
return db
}
它无法在Java连接,而如果我指定的用户名,密码,端口,在JDBC连接字符串服务名和表名可成功连接。
输出是
time="2017-10-10T13:43:02+05:30" level=info msg="Open the database"
time="2017-10-10T13:43:02+05:30" level=info msg="pinging database..."
time="2017-10-10T13:43:24+05:30" level=info msg="Ping failed: ORA-12170: TNS:Connect timeout occurred
retry in 1 seconds."
time="2017-10-10T13:43:25+05:30" level=info msg="pinging database..."
time="2017-10-10T13:43:46+05:30" level=info msg="Ping failed: ORA-12170: TNS:Connect timeout occurred
retry in 2 seconds."
答
我不能告诉你到底为什么你的代码IST不工作,但我可以为您提供一些示例代码,我参与了一个顾问的身份:
https://github.com/odbaeu/oracledb_metricbeat/blob/master/oracledb.go
下面的代码片段创建一个新的连接:
// NewDB returns a new oracle database handle. The dsn value (data source name)
// must be valid, otherwise an error will be returned.
//
// DSN Format: username/[email protected]:port/service_name
func NewDB(ociURL string) (*sql.DB, error) {
// NLS_LANG is set to American format. At least NLS_NUMERIC_CHARACTERS has to be ".,".
os.Setenv("NLS_LANG", "AMERICAN_AMERICA.AL32UTF8")
os.Setenv("NLS_DATE_FORMAT", "YYYY-MM-DD\"T\"HH24:MI:SS")
// Open DB connection
oConn, err := sql.Open("oci8", ociURL)
if err != nil {
return oConn, errors.Wrap(err, "sql open failed")
}
return oConn, nil
}
'在这里,当我给db用户名......在哪里?你的代码失败了,错误在哪里? –
@NicholasKrasnov我已经用代码和输出更新了我的问题 – vijay
你确定连接字符串是正确的吗? 'user/pass @ // 127.0.0.1'对我来说似乎很奇怪。 – Peter