如何解决如何使用 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 举报,一经查实,本站将立刻删除。