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()) 형태로 작성하면 단일 레코드 처리 의도를 더 명확하게 드러낼 수 있습니다.