使用 Kotlin Exposed 创建数据库后连接到数据库

Posted

技术标签:

【中文标题】使用 Kotlin Exposed 创建数据库后连接到数据库【英文标题】:Connecting to a database after creating it with Kotlin Exposed 【发布时间】:2020-06-20 03:50:50 【问题描述】:

我正在使用jetbrains' exposed 库来创建和填充数据库。

数据库不存在,我正在创建它。但是,我找不到一种简单的方法来连接到 SQL 引擎、创建数据库并在没有多个连接的情况下连接到该数据库。 这听起来有点笨拙。有没有更好的方法呢?

这是一个小例子:


var db = Database.connect("jdbc:mysql://localhost:3308", driver = "com.mysql.jdbc.Driver", user = "root", password = "aRootPassword")

transaction(db)  SchemaUtils.createDatabase("imdb") 

// avoid reconnect?
db = Database.connect("jdbc:mysql://localhost:3308/imdb", driver = "com.mysql.jdbc.Driver", user = "root", password = "aRootPassword")

transaction(db)  SchemaUtils.create (TitleRatings) 

【问题讨论】:

【参考方案1】:

您需要一个连接池,例如HikariCP。它汇集数据库连接并重用它们。与单独打开的连接相比,这会给您带来巨大的性能提升。

我通常将它包装在一个简单的类中,如下所示:

import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import javax.sql.DataSource

public object DB 

    var db: DataSource = connect();

    public fun connect(): DataSource 
        val config = HikariConfig()
        config.jdbcUrl = "jdbc:mysql://localhost:3308"
        config.username = "com.mysql.jdbc.Driver"
        config.password = "aRootPassword"
        config.driverClassName = "com.mysql.jdbc.Driver"

        return HikariDataSource(config)

    

然后我的交易看起来像这样:

transaction(Database.connect(DB.db)) 
   SchemaUtils.createDatabase("imdb")

【讨论】:

以上是关于使用 Kotlin Exposed 创建数据库后连接到数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用 Kotlin Exposed 进行缓存?

Kotlin Exposed 获取更新的行数

如何通过 Exposed 连接到 Google Cloud SQL

尝试使用JetBrains / Exposed连接到MSSQL数据库

Spring Boot Kotlin 暴露存储过程

如何避免Kotlin暴露的N + 1查询问题。 (通过DAO的Reference.id.value字段获取值时)