微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Kotlin Exposed 正确创建和连接到数据库?

如何解决如何使用 Kotlin Exposed 正确创建和连接到数据库?

我确实检查了类似的问题 here,但它没有按我预期的那样工作,我仍然需要重新连接到创建的数据库,但我不确定如何或是否可以避免这种情况。

这是我的代码

existing_fields.update(**kNown_update_dict) query = some_table.update() # just adding some where-condition here... query = query.where(getattr(some_table.c,"primary_key") == 99) query.values(**existing_fields)

hikari.properties:
jdbcUrl=jdbc:mariadb://localhost:3306/
driverClassName=org.mariadb.jdbc.Driver
username=root
dataSource.databaseName=dbnAME //this doesn't seem to do much,I'm getting the same behavior with or without it

我创建新数据源的原因是,否则我会收到此错误fun initDB() { val config = HikariConfig("/hikari.properties") val ds = HikariDataSource(config) transaction(connect(ds)) { SchemaUtils.createDatabase("dbnAME") } config.jdbcUrl = "jdbc:mariadb://localhost:3306/dbnAME" //ds.jdbcUrl = "jdbc:mariadb://localhost:3306/dbnAME" //THIS WILL NOT WORK val ds2 = HikariDataSource(config) transaction(connect(ds2)) { SchemaUtils.create( Tables... ) } } HikariConfigMXBean 似乎不允许 jdbcUrl 更改。

一定有更优雅的方式来做到这一点,对吗?

解决方法

这不是一个好习惯。创建和填充数据库是两个独立的过程。 DB由DBA创建一次,然后您只需连接并使用它。您的方法存在严重的安全违规。来自数据源的用户必须具有创建数据库权限。

但是如果你想继续你目前的方法,首先你应该创建一个不使用数据源的数据库,然后创建数据源并连接到数据库。像这样

import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.Table
import org.jetbrains.exposed.sql.transactions.transaction

fun main(args: Array<String>) {
    
    //LOAD proerties
    val config = HikariConfig("/hikari.properties")
    //Hikari properties content
    //    jdbcUrl=jdbc:mysql://localhost:3306/hikari
    //    driverClassName=com.mysql.cj.jdbc.Driver
    //    username=root
    //    password=<pwd here>
    //Here replace dbname from jdbc url to empty
    transaction(Database.connect(url = config.jdbcUrl.replace("hikari",""),driver = config.driverClassName,user = config.username,password = config.password)) {
        SchemaUtils.createDatabase("hikari")
    }

    val ds = HikariDataSource(config)
    transaction(Database.connect(ds)) {
        SchemaUtils.create(Users)
    }
}

object Users : Table() {
    val id = varchar("id",10) // Column<String>
    val name = varchar("name",length = 50) // Column<String>
    override val primaryKey = PrimaryKey(id,name = "PK_User_ID")
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。