使用JDBC连接数据库
在Kotlin中通过JDBC连接数据库需要添加相关驱动依赖。以MySQL为例,需在build.gradle.kts
文件中添加依赖:
dependencies {implementation("mysql:mysql-connector-java:8.0.28")
}
创建数据库连接的基本代码示例:
import java.sql.DriverManagerfun main() {val url = "jdbc:mysql://localhost:3306/database_name"val user = "username"val password = "password"val connection = DriverManager.getConnection(url, user, password)connection.use { conn ->val statement = conn.createStatement()val resultSet = statement.executeQuery("SELECT * FROM table_name")while (resultSet.next()) {println(resultSet.getString("column_name"))}}
}
使用HikariCP连接池
为提高性能,推荐使用连接池管理数据库连接。添加HikariCP依赖:
dependencies {implementation("com.zaxxer:HikariCP:5.0.1")
}
配置HikariCP连接池:
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSourcefun getDataSource(): HikariDataSource {val config = HikariConfig().apply {jdbcUrl = "jdbc:mysql://localhost:3306/database_name"username = "username"password = "password"maximumPoolSize = 10}return HikariDataSource(config)
}fun main() {val dataSource = getDataSource()dataSource.connection.use { conn ->// 执行数据库操作}
}
使用Exposed框架
Exposed是Kotlin生态中流行的SQL框架。添加依赖:
dependencies {implementation("org.jetbrains.exposed:exposed-core:0.41.1")implementation("org.jetbrains.exposed:exposed-dao:0.41.1")implementation("org.jetbrains.exposed:exposed-jdbc:0.41.1")
}
使用Exposed进行数据库操作示例:
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transactionobject Users : Table() {val id = integer("id").autoIncrement()val name = varchar("name", 50)override val primaryKey = PrimaryKey(id)
}fun main() {Database.connect("jdbc:mysql://localhost:3306/database_name",driver = "com.mysql.cj.jdbc.Driver",user = "username",password = "password")transaction {SchemaUtils.create(Users)Users.insert { it[name] = "Kotlin" }Users.selectAll().forEach { println(it[Users.name]) }}
}
使用Ktor与数据库集成
在Ktor应用中集成数据库,结合HikariCP的典型配置:
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import io.ktor.server.application.*
import org.jetbrains.exposed.sql.Databasefun Application.configureDatabase() {val config = HikariConfig().apply {driverClassName = "com.mysql.cj.jdbc.Driver"jdbcUrl = environment.config.property("db.url").getString()username = environment.config.property("db.user").getString()password = environment.config.property("db.password").getString()}val dataSource = HikariDataSource(config)Database.connect(dataSource)
}
在application.conf
中配置数据库参数:
db {url = "jdbc:mysql://localhost:3306/database_name"user = "username"password = "password"
}
事务管理
使用事务确保数据一致性:
transaction {try {Users.insert { it[name] = "New User" }commit()} catch (e: Exception) {rollback()throw e}
}