PHpullh
학습 라이브러리/Kotlin/데이터베이스 연결 (JDBC)

KOTLIN · 파일/IO

데이터베이스 연결 (JDBC)

Kotlin에서 JDBC를 활용하여 데이터베이스에 연결하고 쿼리를 수행합니다. use로 리소스를 안전하게 관리합니다.

파일/IO중급jdbcdatabasesqlprepared-statement

핵심 설명

Kotlin에서 JDBC를 활용하여 데이터베이스에 연결하고 쿼리를 수행합니다. use로 리소스를 안전하게 관리합니다.

Kotlin code

import java.sql.DriverManager
import java.sql.ResultSet

data class Product(val id: Int, val name: String, val price: Int)

fun <T> ResultSet.toList(mapper: (ResultSet) -> T): List<T> = buildList {
    while (next()) { add(mapper(this@toList)) }
}

fun main() {
    // H2 인메모리 DB 예시
    val url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"

    DriverManager.getConnection(url).use { conn ->
        // 테이블 생성
        conn.createStatement().use { stmt ->
            stmt.execute("""
                CREATE TABLE products (
                    id INT PRIMARY KEY AUTO_INCREMENT,
                    name VARCHAR(100),
                    price INT
                )
            """.trimIndent())
        }

        // 데이터 삽입 (PreparedStatement)
        conn.prepareStatement("INSERT INTO products (name, price) VALUES (?, ?)").use { ps ->
            listOf("노트북" to 1500000, "마우스" to 30000, "키보드" to 80000).forEach { (name, price) ->
                ps.setString(1, name)
                ps.setInt(2, price)
                ps.executeUpdate()
            }
        }

        // 조회
        conn.prepareStatement("SELECT * FROM products WHERE price > ?").use { ps ->
            ps.setInt(1, 50000)
            ps.executeQuery().use { rs ->
                val products = rs.toList { Product(it.getInt("id"), it.getString("name"), it.getInt("price")) }
                products.forEach { println(it) }
            }
        }
    }
}

학습 팁

PreparedStatement를 사용하면 SQL 인젝션을 방지하고 쿼리 성능도 향상됩니다. 문자열 연결로 쿼리를 만들지 마세요.

주의할 점

Connection, Statement, ResultSet을 닫지 않으면 커넥션 풀이 고갈됩니다. 항상 use 블록을 사용하세요.

자주 묻는 질문

데이터베이스 연결 (JDBC)란 무엇인가요?

Kotlin에서 JDBC를 활용하여 데이터베이스에 연결하고 쿼리를 수행합니다. use 로 리소스를 안전하게 관리합니다.

데이터베이스 연결 (JDBC) 학습 시 주의할 점은 무엇인가요?

Connection , Statement , ResultSet 을 닫지 않으면 커넥션 풀이 고갈됩니다. 항상 use 블록을 사용하세요.