지난 시간에 SQL 쿼리문의 문법을 상세히 살펴보았다면,
이번 시간에는 SQL을 프로그램에서 실제로 응용해보는 시간을 가질 것입니다.
다시 말해, DB와 프로그램을 서로 연동하는 것을 해보겠다는 뜻입니다.
JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API 입니다. 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공합니다.
전체 소스코드는 위와 같습니다.
가독성을 높이기 위해 이미지로 제시하였습니다.
위의 소스코드는 맨 밑에서 다운받으실 수 있습니다.
그렇다면 위의 소스코드를 하나하나씩 살펴보겠습니다.
1) Class.forName("com.mysql.jdbc.Driver");
JDBC 드라이버를 설정해줍니다.
저의 경우 MySQL을 사용하였기에 MySQL 드라이버로 설정해주었습니다.
2) conn = DriverManager.getConnection("jdbc:mysql://localhost/testdb", "root", "(password)");
DB가 존재하는 Host, DB Name, 해당 DB에 접근할 사용자의 아이디 및 비밀번호를 이용해 연결을 시도합니다.
위의 명령문을 자세히 살펴보면 아래와 같습니다.
DriverManager.getConnection("jdbc:mysql://(Host)/(DB명)", "(아이디)", "(비밀번호)");
Host: localhost
DB명: testdb
아이디: root
비밀번호: ***
다른 DBMS의 경우 주소가 약간 다를 수 있지만, MySQL DB에 연결을 시도하는 명령문은 위와 같이 바라보시면 됩니다.
제가 언급한 4가지를 모두 올바르게 명시해주면 정상적으로 연결 될 것입니다.
1) String query = "SELECT Sname FROM STUDENT WHERE Year = ? AND GPA >= ?";
예비 SQL 쿼리문을 명시해놓았습니다.
명령문을 보면 '?' 라고 적혀있는 부분이 있는데, 이 부분을 값으로 매꾸는 것은 곧 살펴볼 것입니다.
2) ps = conn.prepareStatement(query);
쿼리문을 실행시킬 준비를 사전에 해놓습니다.
3) ps.setInt(1, 2);
'?' 로 되어있는 부분을 정수 값으로 메꾸기 시작합니다.
위의 명령문을 자세히 살펴보면 아래와 같습니다.
ps.setInt(<index>, <value>);
해석: 앞에서부터 <index> 번째의 '?'를 <value> 값으로 매꿉니다.
살펴본 바와 같이 명령문을 해석하면, 1번째 ?를 정수값 2로 대체하는 것이 되겠습니다.
다음 명령문까지 실행되면 ? 값들이 모두 대체되고, 아래와 같이 완성된 형태의 쿼리문이 됩니다.
SELECT Sname FROM STUDENT WHERE Year = 2 AND GPA >= 3
4) rs = ps.executeQuery();
완성된 형태의 쿼리문을 실제로 실행시킨 다음 iterator 형태로 구성된 결과값들을 return 합니다.
1) rs.next();
iterator 형태로 구성된 집합체에 접근하여, 다음 값을 포인팅한 후 값이 존재하는지 확인합니다.
다음 값이 존재하면 true, 아니면 false를 return 합니다.
위의 소스 코드의 경우 while문 속에 해당 명령문이 존재하므로, 값을 하나씩 가리키다가 더 이상 값이 존재하지 않으면 while 루프를 빠져나오는 것이라고 해석할 수 있습니다.
2) rs.getString(1);
문자열 값을 집합체에서 가져옵니다.
함수 인자가 1 이므로 1번째 attribute 값(Sname)을 가져온다고 해석할 수 있습니다.
위의 명령문을 정리하면 아래와 같습니다.
rs.getString(<index>);
해석: <index> 번째 attribute 값을 return 합니다.
1)
conn.close();
ps.close();
DB 연결을 해제하고 메모리를 삭제합니다.
C/C++ 에서 동적 메모리를 해제하듯이, 필요없는 메모리는 제때제때 삭제해주어야 됩니다.
물론 프로그램이 종료되면 자동으로 삭제되겠지만, 실생활에서 사용되는 프로그램은 24시간 계속 돌아가기도 합니다.
이러한 프로그램에서 메모리 관리를 해주지 않으면 메모리가 낭비될 수 있고,
메모리가 계속 쌓이다보면 나중에 감당치 못하는 수준이 되어 해당 시스템이 죽게 되죠 ㅠㅠ
이렇게 소스 코드 분석을 차근차근 해보았습니다.
이제 프로그램을 직접 실행시켜본 후 결과를 살펴보겠습니다.
DB 속에 위와 같은 값들이 들어가 있고,
SELECT Sname FROM STUDENT WHERE Year = 2 AND GPA >= 3
위의 쿼리문을 실행하였으므로 결과는 아래와 같이 나오는 것이 맞습니다.
정상적으로 프로그램이 돌아가는 것을 볼 수 있습니다.
[소스코드 다운로드]
'IT강의 > 데이터베이스' 카테고리의 다른 글
2018년도 정보처리기사 실기 2회 문제풀이 및 해설 - 5. SQL 쿼리문 (0) | 2020.12.27 |
---|---|
2018년도 정보처리기사 실기 2회 문제풀이 및 해설 - 4. 데이터베이스 이론 (0) | 2020.12.27 |
SQL - 데이터 조작어 (0) | 2020.12.26 |
SQL - SELECT문 (0) | 2020.12.26 |
관계 대수 (0) | 2020.12.26 |