跳到主要内容

Kotlin 数据库操作

使用 JDBC

基本操作

import java.sql.*

fun main() {
val url = "jdbc:mysql://localhost:3306/mydb"
val user = "root"
val password = "password"

Connection.use { conn ->
conn.driverClassName = "com.mysql.cj.jdbc.Driver"

// 查询
val stmt = conn.prepareStatement("SELECT * FROM users WHERE id = ?")
stmt.setInt(1, 1)
val rs = stmt.executeQuery()

while (rs.next()) {
println("${rs.getInt("id")}: ${rs.getString("name")}")
}

// 插入
val insert = conn.prepareStatement("INSERT INTO users (name) VALUES (?)")
insert.setString(1, "Tom")
insert.executeUpdate()
}
}

使用 Exposed

Kotlin 官方 ORM 框架。

配置

// build.gradle.kts
dependencies {
implementation("org.jetbrains.exposed:exposed-core:0.41.1")
implementation("org.jetbrains.exposed:exposed-jdbc:0.41.1")
implementation("com.mysql:mysql-connector-j:8.0.33")
}

定义表

import org.jetbrains.exposed.sql.*

object Users : Table() {
val id = integer("id").autoIncrement()
val name = varchar("name", 50)
val email = varchar("email", 100).uniqueIndex()

override val primaryKey = PrimaryKey(id)
}

CRUD 操作

import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction

fun main() {
Database.connect("jdbc:mysql://localhost:3306/mydb", "com.mysql.cj.jdbc.Driver", "root", "password")

transaction {
// 插入
val userId = Users.insert {
it[name] = "Tom"
it[email] = "[email protected]"
} get Users.id

// 查询
val users = Users.select { Users.name like "%Tom%" }

// 更新
Users.update({ Users.id eq userId }) {
it[name] = "Tom Updated"
}

// 删除
Users.deleteWhere { Users.id eq userId }
}
}

使用 Room (Android)

// build.gradle.kts
dependencies {
implementation("androidx.room:room-runtime:2.5.2")
implementation("androidx.room:room-ktx:2.5.2")
kapt("androidx.room:room-compiler:2.5.2")
}

@Entity
data class User(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val name: String,
val email: String
)

@Dao
interface UserDao {
@Query("SELECT * FROM user")
suspend fun getAll(): List<User>

@Insert
suspend fun insert(user: User)

@Delete
suspend fun delete(user: User)
}

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}