一、背景
KMP项目链接mysql数据库有很多方式,其中最基础的是直接使用mysql驱动,本文分享如何使用msyql驱动查询数据库数据。
二、Mysql搭建
首先要有mysql数据库,如果有供使用的可以略过创建环节。此处使用docker进行mysql创建,大概花费5分钟。
docker desktop
这里预设大家都安装好了docker desktop。如果没有安装可参考作者另外的文章安装。
mysql
点击mysql镜像右侧的Run按钮,准备启动一个mysql容器。
注意:Environment variables这里必须添加参数MYSQL_ROOT_PASSWORD,value设置一个数据库密码。
如果不设置root密码,启动容器后会报错,要求输入默认密码参数。点击Run启动,如下
原始数据
使用mysql客户端工具,这里以DataGrip为例。新建连接,输入上面创建的数据库信息。
可以点击Test Connection看看是否可以成功连接数据库,如果成功会显示successful信息。点击OK后,会创建数据库连接。
右键数据库连接,新建Query Console,输入以下SQL分别创建数据库,创建表。
#创建数据库
CREATE database kmp_db;
#切换到数据库
use kmp_db;
#创建表
CREATE TABLE kmp_db_user (
uid INT PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(255) NOT NULL,
pwd VARCHAR(255) NOT NULL,
create_date DATE
);
#插入数据库
INSERT INTO kmp_db_user (uname, pwd, create_date)
VALUES ('赵泓博', '654321', '2025-06-18');
#查询表数据
SELECT * FROM kmp_db_user;
这时候,数据库已经有表和数据了。
三、KMP查数据库
kmp server项目
新建KMP项目,只勾选server支持。
在main入口所在的Application.kt文件中,已经有模板代码生成的服务,此处的SERVER_PORT为服务端口号,一会浏览器打开要用。
package cn.aihongbo.mysql
import cn.aihongbo.mysql.data.DBHelper
import io.ktor.server.application.Application
import io.ktor.server.engine.embeddedServer
import io.ktor.server.netty.Netty
import io.ktor.server.response.respondText
import io.ktor.server.routing.get
import io.ktor.server.routing.routing
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
fun main() {
embeddedServer(Netty, port = SERVER_PORT, host = "0.0.0.0", module = Application::module).start(
wait = true
)
}
fun Application.module() {
routing {
get("/") {
call.respondText("Ktor: ${Greeting().greet()}")
}
get("/getTest") {
val result = DBHelper.queryUname()
call.respondText(result)
}
}
}
routing部分为api路由,默认已经有了根节点访问处理。这里添加了"/getTest"路径,一会在浏览器访问查询数据库数据库并返回。
下面写DBHelper类,主要是连接数据库,并查询数据。在此之前,需要先添加msyql驱动依赖mysql:mysql-connector-java:8.0.28包。如下
dependencies {
implementation(libs.logback)
implementation(libs.ktor.serverCore)
implementation(libs.ktor.serverNetty)
testImplementation(libs.ktor.serverTestHost)
testImplementation(libs.kotlin.testJunit)
implementation("mysql:mysql-connector-java:8.0.28")
}
同步后,项目就可以连接msyql数据库了。写DBHelper类,集中处理数据库相关。
package cn.aihongbo.mysql.data
import java.sql.DriverManager
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
object DBHelper {
val url = "jdbc:mysql://localhost:3306/kmp_db"
val user = "root"
val password = "zhaohongbo"
suspend fun queryUname(): String = suspendCoroutine { continuation ->
val connection by lazy { DriverManager.getConnection(url, user, password) }
connection.use { conn ->
val statement = conn.createStatement()
val resultSet = statement.executeQuery("SELECT * FROM kmp_db_user")
while (resultSet.next()) {
val uname = resultSet.getString("uname")
val pwd = resultSet.getString("pwd")
val create_date = resultSet.getString("create_date")
continuation.resume("${uname}的密码是:${pwd},账号创建于${create_date}")
}
}
}
}
这里是连接本地3306端口的数据库kmp_db,并查询kmp_db_user表中的数据,返回第一个用户的信息拼接。点击Application.kt文件中main方法左侧的运行按钮,运行此服务,然后打开浏览器输入:http://localhost:8080/getTest。
至此,一个基础的API服务,提供查询msyql数据库的实例已经完成。
下次介绍使用Exposed组件更轻松管理和查询数据库。