2020-06-11
JAVAJDBCMYSQL

JDBC 連線 URL 模式

JDBC 連線 url 模式。 Format of JDBC connection URL.

JDBC url

本篇完全照著官方的介紹,如果覺得我寫的不好懂,也可以直接看官網


這是通用的連線表示法:

"protocol//[hosts][/database][?properties]"

一串看不懂的字… 我們可以把它分開來看,會發現他其實… 還真的滿討厭的。

  • protocol
  • hosts
  • database
  • properties

protocol

顧名思義,就是連線的協議!官方一樣有幫我們列出以下可能出現的協議:

  • jdbc:mysql: 這是最常見、最普通的連線方法
  • jdbc:mysql:loadbalance: 給有做負載均衡的 JDBC 連線使用
  • jdbc:mysql:replication: 給有做 replication 的 JDBC 連線使用
  • mysqlx: 給 X DevAPI 的連線
  • jdbc:mysql+srv: 給有使用 SRV records 的 JDBC 連線使用
  • jdbc:mysql+srv:loadbalance: 給有負載均衡 同時有 SRV records 的 JDBC 連線使用
  • jdbc:mysql+srv:replication: 給有做 replication 同時有 SRV record 的 JDBC 連線使用
  • mysqlx+srv: 給有 X DevAPI 同時有 SRV record 的連線使用

協議這麼多種,我們這次會用到的也就只有第一種,jdbc:mysql。 其他要用到的時候再去看就好。


hosts

依不同的情況,hosts 段落可以從簡單的單一主機位置到多主機、包含帳號密碼等。

  • 單一主機位置 ( single host )
  • 多主機位置 ( multiple host )
  • 埠號 ( port )
  • 主機特定屬性 ( host-specific properties )
  • 使用者憑證 ( user credentials ) ( 也就是認帳號、密碼 )
單一主機位置
"jdbc:mysql://127.0.0.1:4099/neon"

其中的 127.0.0.1:4099 就是主機位置。

host 可以是 IPv4 或是 IPv6,若是在 IPv6 的情況下,必須寫在方括號內 [::1] ( 雖然文件上說要寫在方括號內,但我實際測試好像不用 [::1] 跟 ::1 都是過的,不管如何 寫在方括號內比較整齊,還是都寫在方括號內吧! )

"jdbc:mysql://[::1]:4099/neon"

"jdbc:mysql://::1:4099/neon"

那 port 的話就是標準的埠號, 1 ~ 65535 都可以使用, ( 當然 1-1023 是被保留的 ) 如果不指定,預設是 3306, 阿如果是使用 X Protocol,預設是 33060。( 我也不太清楚 X Protocol 是什麼 )

多主機位置

其實不複雜,只要在 host 跟 host 間用逗號隔開就好了。

host1,host2,host3,...,hostN
"jdbc:mysql://127.0.0.1:4089,127.0.0.1:4090/neon"

"jdbc:mysql://address=(host=127.0.0.1)(port=4089),address=(host=127.0.0.1)(port=4090)/neon"

"jdbc:mysql://(host=127.0.0.1,port=4089),(host=127.0.0.1,port=4090)/neon"

"jdbc:mysql://127.0.0.1:4089,(host=127.0.0.1,port=4090)/neon"

同樣,可以包在中括號 裡面。

"jdbc:mysql://[127.0.0.1:4089,(host=127.0.0.1,port=4090)]/neon"

使用者驗證

之前的帳號密碼是這樣進行驗證的:

DriverManager.getConnection("jdbc:mysql://127.0.0.1:4089/neon", "wayne", "test1234");

但其實可以寫在 url 裡面

"jdbc:mysql://wayne:test1234@127.0.0.1:4089/neon"
// 或是這樣
"jdbc:mysql://address=(host=127.0.0.1)(port=4089)(user=wayne)(password=test1234)/neon"

database

如果沒有指定連線的資料庫,預設就是「不指定資料庫」 之後要查詢的話就是多指定資料庫名稱在 SQL 語法中而已

> Select * From dbname.tableName;

要指定的話只要這樣:

"jdbc:mysql://127.0.0.1:4099/neon"

最後面的 neon 就是 db 的名稱了

properties

用法的話就是在 ? 後面加 key=value 如果有多組的話用 & 隔開。 ( 其實就跟我們常用在網頁 uri 的那個很像 )

"jdbc:mysql://127.0.0.1:4099/neon?key1=value&key2=value2&key3=value3"

稍微注意一下 key 是區分大小寫的