iT邦幫忙

2021 iThome 鐵人賽

DAY 14
1
Modern Web

Kotlin 怎麼操作資料庫?談談 Kotlin Exposed 框架系列 第 14

[Day 14] 更換連線的資料庫,聊 Database.connect 的操作

之前我們連線的,一直都是測試用的資料庫。

今天我們來練線 MySQL 資料庫來進行操作。

連線MySQL

目前有不少網站的資料庫實作,是透過 MySQL 資料庫,我們來嘗試連線 MySQL 資料庫。

假設各位在本機已經有一個正在運行的 MySQL 資料庫,首先,我們要在套件內多安裝 mysql connector 套件

implementation("mysql:mysql-connector-java:5.1.48")

和前面文章安裝 Exposed 框架時一樣,記得要 Load Gradle Change

Load Gradle Change

接著只要我們調整連線方式

Database.connect(  
    "jdbc:mysql://localhost:3306/exposedyoutubedemo?useSSL=false",  
 	driver = "com.mysql.jdbc.Driver",  
 	user = "user",  
 	password = "password"  
)

這樣連線之後,我們就可以將連線的資料庫從 H2 Database,切換到 MySQL 資料庫了。

如果我們在後面加上資料庫互動的程式

transaction {  
 	SchemaUtils.create(Users)  
    User.new {  
 		name = "Alice"  
 	}  
 	User.new {  
 		name = "Bob"  
 	}  
 	User.all().forEach {  
 		println(it.name)  
    }  
}

就會像之前一樣看到寫入資料庫的內容

Alice
Bob

要注意的是,由於我們這邊不是用 "jdbc:h2:mem:test",所以資料不會在程式終止之後消失。如果我們重複執行上述的程式碼,會導致資料重複寫入。

連線多個資料庫

如果我們要連線多個資料庫,我們可以

val db1 = Database.connect(  
    "jdbc:mysql://localhost:3306/exposedyoutubedemo?useSSL=false",  
 	driver = "com.mysql.jdbc.Driver",  
 	user = "sail",  
 	password = "password"  
)

val db2 = Database.connect(  
    "jdbc:mysql://localhost:3306/exposedyoutubedemo?useSSL=false",  
 	driver = "com.mysql.jdbc.Driver",  
 	user = "sail",  
 	password = "password"  
)

取得連線物件之後,我們在 transaction() 函數內,加上 db1db2 參數,來進行對不同資料庫的連線

transaction(db1) {  
 	SchemaUtils.create(Users)  
    User.new {  
 		name = "Alice"  
 	}  
}  
transaction(db2) {  
 	SchemaUtils.create(Users)  
    User.new {  
 		name = "Bob"  
 	}  
 	User.all().forEach {  
 		println(it.name)  
    }  
}

執行這段程式之後,由於我們的 db1db2 實際上都是連線我們的 MySQL 資料庫,所以我們會看到最後成功印出

Alice
Bob

上一篇
[Day 13] 非同步的操作資料庫?談 suspendedTransactionAsync
下一篇
[Day 15] println() 測試不好嗎?來談談什麼是自動測試?
系列文
Kotlin 怎麼操作資料庫?談談 Kotlin Exposed 框架30

尚未有邦友留言

立即登入留言