KMP开发后端服务+mysql数据查询

发布于:2025-06-21 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、背景

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组件更轻松管理和查询数据库。


网站公告

今日签到

点亮在社区的每一天
去签到