네, 가능합니다. Java의 ArrayList 개념을 활용하면 MySQL 테이블의 데이터를 목록 형태로 손쉽게 가져올 수 있습니다.
기본 문법
리스트 안에 리스트를 담는 중첩 구조를 사용하려면 다음과 같은 문법을 사용합니다.
ArrayList<ArrayList<데이터타입>> 변수명 = new ArrayList<ArrayList<데이터타입>>();
예제 테이블 준비하기
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table demo10 -> ( -> id int not null auto_increment primary key, -> name varchar(20) -> ); Query OK, 0 rows affected (2.19 sec)
다음으로 insert 명령어를 사용해 테이블에 샘플 데이터를 삽입합니다.
mysql> insert into demo10(name) values('John');
Query OK, 1 row affected (0.23 sec)
mysql> insert into demo10(name) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo10(name) values('David');
Query OK, 1 row affected (0.13 sec)select 문을 사용하여 테이블에 저장된 레코드를 확인합니다.
mysql> select *from demo10;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+----+-------+ | id | name | +----+-------+ | 1 | John | | 2 | Bob | | 3 | David | +----+-------+ 3 rows in set (0.00 sec)
Java 코드 예제
이제 JDBC를 통해 MySQL 데이터베이스에 연결하고, 조회한 결과를 ArrayList에 저장하는 전체 Java 코드입니다.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.mysql.jdbc.Statement;
public class ListInListDemo {
public static void main(String[] args) {
Connection con = null;
Statement statement = null;
try {
ArrayList<ArrayList<String>> outer = new ArrayList<ArrayList<String>>();
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sampledatabase", "root", "123456");
statement = (Statement) con.createStatement();
String sql;
sql = "select *from demo10";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
ArrayList<String> inner = new ArrayList<String>();
inner.add(resultSet.getString("name"));
outer.add(inner);
}
System.out.println("조회된 이름 목록은 다음과 같습니다:");
for (int i = 0; i < outer.size(); i++) {
System.out.println(outer.get(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}코드 설명
위 코드의 핵심 로직은 다음과 같습니다.
- 외부 리스트(outer): 각 행(row)의 데이터를 담는 내부 리스트들을 저장하는 상위 ArrayList입니다.
- 내부 리스트(inner): ResultSet에서 한 행씩 읽어올 때마다 새로 생성되며, 해당 행의 name 컬럼 값을 저장합니다.
- while 반복문: resultSet.next()를 통해 모든 행을 순회하면서 각 행의 값을 inner 리스트에 추가하고, 이를 outer 리스트에 누적합니다.
실행 결과
프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
조회된 이름 목록은 다음과 같습니다: [John] [Bob] [David]
이처럼 Java의 중첩 ArrayList 구조를 활용하면 MySQL 테이블의 조회 결과를 유연하게 관리할 수 있습니다. 실무에서는 JPA나 MyBatis 같은 ORM 프레임워크를 사용하는 경우가 많지만, JDBC의 기본 동작 원리를 이해하는 것은 여전히 매우 중요합니다.