Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

Java와 MySQL에서 테이블의 단일 결과만 가져오는 방법

JDBC를 사용해 MySQL 데이터베이스와 연동할 때, 전체 결과가 아닌 하나의 레코드만 가져와야 하는 경우가 종종 있습니다. 이럴 때는 SQL의 LIMIT 절을 활용하면 간단하게 해결할 수 있습니다.

이번 글에서는 실제 예제를 통해 Java에서 MySQL 테이블의 단일 결과만 조회하는 방법을 단계별로 알아보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Id int,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (1.37 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values(101,'Chris');
Query OK, 1 row affected (0.54 sec)
mysql> insert into DemoTable values(102,'David');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(103,'Mike');
Query OK, 1 row affected (0.12 sec)

3. 전체 데이터 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable;

실행 결과는 다음과 같습니다.

+------+-------+
| Id | Name |
+------+-------+
| 101 | Chris |
| 102 | David |
| 103 | Mike |
+------+-------+
3 rows in set (0.00 sec)

현재 테이블에는 총 3개의 레코드가 저장되어 있습니다. 이제 Java 코드를 통해 이 중 맨 위의 단일 레코드만 가져오는 방법을 살펴보겠습니다.

4. Java 코드로 단일 레코드만 조회하기

핵심은 SQL 쿼리 마지막에 LIMIT 1을 붙이는 것입니다. 이렇게 하면 결과 집합에서 첫 번째 행 하나만 반환됩니다.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import com.mysql.jdbc.ResultSetMetaData;

public class OneResultDemo {
public static void main(String[] args) {
Connection con = null;
PreparedStatement ps = null;
Statement st = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/web?useSSL=false", "root", "123456");
String query = "select *from DemoTable " + " limit 1";
st = con.createStatement();
rs = st.executeQuery(query);
while (rs.next()) {
System.out.println("Id=" + rs.getInt("Id"));
System.out.println("Name=" + rs.getString("Name"));
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}

5. 실행 결과 확인

위 프로그램을 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

Id=101
Name=Chris

정리

Java와 MySQL 연동 시 단일 결과만 필요한 경우에는 LIMIT 1 절을 사용하는 것이 가장 간단하고 효율적인 방법입니다. 불필요한 데이터까지 모두 전송받지 않으므로 애플리케이션 성능 면에서도 유리합니다. 또한 rs.next() 반복문 대신 if(rs.next()) 형태로 작성하면 단일 레코드 처리 의도를 더 명확하게 드러낼 수 있습니다.