IT강의/데이터베이스

DB 연동 및 SQL 응용 - JDBC

샤핑 2020. 12. 26. 19:30
728x90
반응형

지난 시간에 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가 존재하는 HostDB 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

위의 쿼리문을 실행하였으므로 결과는 아래와 같이 나오는 것이 맞습니다.
정상적으로 프로그램이 돌아가는 것을 볼 수 있습니다.

 

 

 

[소스코드 다운로드]

https://github.com/jhs951101/JDBCWithStudent

728x90
반응형
LIST