Java JDBC에서 MySQL COUNT 쿼리의 반환 타입
MySQL에서 COUNT 함수의 반환 타입은 long입니다. 따라서 Java에서 결과값을 받을 때는 ResultSet의 getLong() 메서드를 사용해야 합니다.
rs.next();
long result = rs.getLong("anyAliasName");
이제 실제 예제를 통해 확인해 보겠습니다. 먼저 샘플 데이터베이스 test3에 테이블을 생성하고 데이터를 삽입한 뒤, Java 코드로 COUNT 쿼리의 반환값을 조회하는 과정을 단계별로 살펴봅니다.
1단계: 테이블 생성
다음 쿼리로 CountDemo 테이블을 생성합니다.
mysql> create table CountDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.60 sec)
2단계: 레코드 삽입
INSERT 명령어를 사용해 테이블에 샘플 데이터를 추가합니다.
mysql> insert into CountDemo(Name) values('John');
Query OK, 1 row affected (0.21 sec)
mysql> insert into CountDemo(Name) values('Carol');
Query OK, 1 row affected (0.16 sec)
mysql> insert into CountDemo(Name) values('Bob');
Query OK, 1 row affected (0.19 sec)
mysql> insert into CountDemo(Name) values('David');
Query OK, 1 row affected (0.16 sec)3단계: 전체 레코드 조회
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from CountDemo;
실행 결과는 다음과 같습니다.
+----+-------+
| Id | Name |
+----+-------+
| 1 | John |
| 2 | Carol |
| 3 | Bob |
| 4 | David |
+----+-------+
4 rows in set (0.00 sec)
4단계: Java JDBC 코드 작성
아래는 Java JDBC를 사용해 MySQL의 COUNT 쿼리 결과를 long 타입으로 받아오는 전체 코드입니다. SQL에서 별칭(alias)인 totalCount를 지정하고, rs.getLong("totalCount")로 값을 읽어오는 것이 핵심입니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ReturnTypeOfCount {
public static void main(String[] args) {
Connection con=null;
Statement st=null;
ResultSet rs=null;
try {
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test3?useSSL=false",
"root","123456");
String yourQuery = "SELECT COUNT(*) AS totalCount FROM CountDemo";
st = con.createStatement();
rs = st.executeQuery(yourQuery);
rs.next();
long result= rs.getLong("totalCount");
System.out.println("Total Count="+result);
} catch(Exception e) {
e.printStackTrace();
}
}
}
실행 결과
프로그램을 실행하면 다음과 같이 총 레코드 수가 출력됩니다.
Total Count=4
이처럼 MySQL의 COUNT 함수는 long 타입을 반환하므로, Java에서 getInt() 대신 getLong()을 사용하는 것이 올바른 방법입니다. 이는 COUNT 결과가 int 범위를 초과할 수 있기 때문이며, 안전하게 처리하기 위한 권장 사항입니다.