🗣 Wd提问: Kotlin MySQL
🤖 Ai回答: Below is a concise “starter kit” that gets you from zero to CRUD in Kotlin with MySQL、
It covers:
1、Picking a driver
2、Adding the dependency (Gradle)
3、Opening / closing a connection
4、Plain JDBC (no extra libraries)
5、The same thing with the lightweight DSL Exposed (JetBrains)
6、A few tips on connection pooling, coroutines and reactive drivers
You can copy-paste the snippets and run them as-is after you create a test database.
1、Which driver?
MySQL Connector/J (Oracle’s official JDBC driver) – synchronous, blocking、
r2dbc-mysql – reactive, non-blocking, works with coroutines、
Exposed – JetBrains’ Kotlin SQL DSL, sits on top of JDBC.
2、Gradle (Kotlin DSL)
plugins {
kotlin(jvm) version 1.9.24
application
}
repositories { mavenCentral() }
dependencies {
implementation(mysql:mysql-connector-java:8.3.0) // JDBC driver
implementation(org.jetbrains.exposed:exposed-core:0.49.0) // optional DSL
implementation(org.jetbrains.exposed:exposed-jdbc:0.49.0)
implementation(com.zaxxer:HikariCP:5.1.0) // connection pool
}
application {
mainClass.set(demo.MainKt)
}
3、Database & table for the demo
CREATE DATABASE demo CHARACTER SET utf8mb4;
USE demo;
CREATE TABLE users(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
4、Plain JDBC in Kotlin
package demo
import java.sql.DriverManager
import java.sql.SQLException
object JdbcExample {
private const val URL = jdbc:mysql://localhost:3306/demo?serverTimezone=UTC
private const val USER = root
private const val PASSWORD = secret
fun run() {
// 1) Load driver (optional since JDBC 4)
Class.forName(com.mysql.cj.jdbc.Driver)
// 2) Get connection (use try-with-resources / use {})
DriverManager.getConnection(URL, USER, PASSWORD).use { conn -
conn.prepareStatement(INSERT INTO users(name) VALUES (?)).use { ps -
ps.setString(1, Alice)
ps.executeUpdate()
}
conn.prepareStatement(SELECT id, name FROM users).use { ps -
ps.executeQuery().use { rs -
while (rs.next()) {
println(User ${rs.getInt(id)}: ${rs.getString(name)})
}
}
}
} // connection closed automatically
}
}
fun main() = JdbcExample.run()
5、Same thing with Exposed (JetBrains DSL)
package demo
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
object Users : IntIdTable(users) {
val name = varchar(name, 100)
}
object ExposedExample {
private const val URL = jdbc:mysql://localhost:3306/demo?serverTimezone=UTC
private const val USER = root
private const val PASSWORD = secret
fun run() {
Database.connect(
url = URL,
driver = com.mysql.cj.jdbc.Driver,
user = USER,
password = PASSWORD
)
transaction {
// Insert
Users.insert { it[name] = Bob }
// Select
Users.selectAll().forEach {
println(User ${it[Users.id]}: ${it[Users.name]})
}
}
}
}
fun main() = ExposedExample.run()
6、Production-grade extras
Connection pool
Replace the simple `Database.connect` with a HikariDataSource:
val ds = HikariDataSource(HikariConfig().apply {
jdbcUrl = URL
username = USER
password = PASSWORD
maximumPoolSize = 10
})
Database.connect(ds)
Coroutines / reactive
Use `r2dbc-mysql` + `kotlinx-coroutines-r2dbc`:
implementation(io.r2dbc:r2dbc-mysql:0.8.2)
implementation(org.jetbrains.kotlinx:kotlinx-coroutines-reactor)
SQL migrations
Flyway or Liquibase work great from Gradle tasks.
Date/Time
Use `java.time.*` types; MySQL Connector/J 8.x maps them automatically.
Security
Never hard-code credentials; use environment variables or a secrets manager.
That’s all you need to start talking to MySQL from Kotlin.
📣 商家广告 :
👍
0
👎
IP地址: 137.49.90.47
搜索次数: 0
提问时间: 2025-11-08 11:53:11
🛒 域名购买 :
ef.gs 214.net.cn 010.hk 8xg.net jjjg.cn s-k.com.cn 04.gs 87.gold 523.net.cn zhansou.cn
❓️ 热门提问 :
服务器搭建虚拟主机 查看ip 美国服务器群 备用dns 云主机网站性能 机房拍照 关键词搜索引擎SaaS 软件开发校招 体验云服务器 互联网推广托管 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
kqwn.cn bw.gs su7.gx.cn Daxie.cn fscarpet.com oo.js.cn 32.cx qiuche.com 3q.xz.cn rr.hk.cn
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
한국 검색엔진
검색 엔진 소스 코드
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。