본문 바로가기
boostcource/boostcourse_web programming

JDBC -1

by sgyeong 2024. 4. 24.

 

 

Maven Project를 만들어준다. (quick start)

 

 

 

Maven 프로젝트를 생성하면 제일 먼저 pom.xml에 플러그인을 설치해준다.

 

 

그리고 JDBC를 사용하기 위해 드라이버를 추가해준다.

 

 

 

저장한 다음 Maven Update Project를 수행해준다.

 

 

 

 

role 테이블로 실습을 진행한다.

 

 

먼저 mysql에 접속한 다음 role 테이블의 구조를 확인한다.

 

 

 

정보를 담을 객체를 만들기 위해 Role 클래스를 만들어준다.

 

 

 

roleId와 description을 만들어준다.    (* 이때 java의 필드명은 카멜 표기법을 사용한다.)

 

 

 

데이터를 넣고 꺼내기 위해 getter, setter 메서드를 사용해준다.

 

 

그리고 안의 값을 편하게 출력하기 위해 toString 메서드를 오버라이딩하여 사용해준다.

 

 

 

 

나중에 객체 생성할 때 편하게 생성하기 위해 인자값 두 개를 받아서 값을 담아주는 생성자를 만든다.

 

 

 

 

다음으로 role 테이블의 정보를 입력, 수정, 삭제, 조회하기 위한 기능의 RoleDao 클래스를 만들어준다.

 

 

 

 

roleId를 받아서 role에 대한 정보를 가져오는 getRole() 메서드를 만들어준다.

 

연결을 해 줄 Connection 객체와 명령할 수 있는 PreparedStatement 객체, 결과값을 담아낼 ResultSet객체를 선언해준다.

 

데이터베이스에 연결할 경우 중간에 접속이 끊기는 등 예외상황들이 많을 것이다. 따라서 선언한 다음 try catch 구문을 이용해 예외처리를 해준다.

 

 

마지막에는 접속했던 부분들을 반드시 닫아줘야 한다. 하지만 잊어버릴 수도 있기 때문에 먼저 닫아 주는 것이 좋다. 

finally 구절에 닫아주는 코드를 써준다. close()라는 메서드도 예외를 처리해야 하는 메서드이다. 그렇기 때문에 이 부분에도 예외를 처리하는 로직을 만들어준다.

 

이때, 접속을 맺는 중에 예외를 발생할 수 있고, 명령을 얻어내다가 예외를 발생할 수도 있는 등 언제 예외가 발생할 지 모른다.

만약 rs가 null인 상태였을때 수행하게 되면 NullpointerException이 발생할 것이다.

그렇기 때문에 예외가 발생할 상황들에 대해 먼저 피해주게 하기 위해 if문으로 rs가 null이 아닐 때만 수행할 수 있도록 해준다.

이런식으로 해서 조금이라도 더 안전하고 오류를 발생시키지 않게 코드를 만드 것이 좋다.

 

이렇게 앞서 객체들을 닫아준 다음, 드라이버를 로딩해준다. MySQL을 사용하기 때문에 MySQL 이 제공해주는 클래스가 메모리에 올라오도록 해준다. 이 부분을 수행하기 위해서 클래스가 가지고 있는 forName 메서드를 수행시켜주면 드라이버가 로딩되도록 한다.

 

다음으로 Connection 객체를 얻어온다. Connection 객체를 얻어오는 코드는 java sql 패키지가 가지고 있는 DriverManager 클래스가 존재한다. 이 클래스가 가지고 있는 getConnection 메서드를 이용하면 된다. 이때 getConnection 메서드에 접속할 DB의  url, user, password 정보를 담아주면 된다.

db접속은 많은 메서드에서 사용되기 때문에 상수처럼 바깥쪽에 선언해놓고 같이 이용한다.

이렇게 접속할 수 있는 connection 객체를 만들었다.

 

 

 

그리고 connection 객체를 이용해 statement 객체를 얻어온다.

statement 객체에는 role이라는 테이블에서 role_id와 description을 얻어오는 쿼리문을 만들어서 넣어준다.

PreparedStatement의 특징으로 메소드가 호출될 때 인자값이 무엇이 들어있냐에 따라 값이 매번 바뀌기 때문에 ?를 써준다. 쿼리 자체가 계속 변경되지 않고 물음표가 바인딩 되는 부분만 바뀌기 때문에 쿼리가 수행될때 효율이 좋다.

물음표에 대한 값을 반드시 바꿔줘야 한다. PreparedStatement가 가지고 있는 set메서드를 이용하며, role_id컬럼이 integer이기 때문에 setInt를 이용하면 된다. 이때 parameterIndex는 물음표의 순서이다. 두번째 파라미터는 받아올 값을 넣어준다.

 

마지막으로 executeQuery()메서드를 이용해 실행을 요청한다. 

 

 

 

resultSet객체에서 결과값을 꺼내온다. role_id에 해당하는 결과값이 없을 수도 있으니 조건문에 rs의 next()메서드를 사용한다. next () 메서드는 리턴타입이 boolean이다. next메서드는 결과값이 있다면 다음 레코드로 커서를 이동시키고 true를 리턴해준다. 만약 결과가 없다면 false를 리턴해준다.

 

만약 있다면 값을 꺼내온다. rs라는 resultSet객체가 갖고 있는 get메서드를 이용한다. 순서에 상관없이 select를 수행했을때 나열한 순서에 맞춰준다.

괄호 안에는 컬럼의 순서를 넣어줘도 되지만, 컬럼의 이름을 넣어줘도 된다. 

 

선언한 객체에 담아서 보내주기 위해 role 객체를 만들어준다.

 

 

 

 

잘 실행되는지 확인하기 위해 JDBCExam1을 만들어서 실행해본다.

roleId 100번에 description은 Developer가 들어있는 것을 볼 수 있다. 

 

 

 

쿼리문을 수행했을때 같은 결과가 나온다.

 

 

 

 

 

 

 

 

 

 

 

 

참고 : boostcourse    https://www.boostcourse.org/web316/lecture/254309/?isDesc=false

 

웹 프로그래밍(풀스택)

부스트코스 무료 강의

www.boostcourse.org

 

'boostcource > boostcourse_web programming' 카테고리의 다른 글

JDBC -3  (0) 2024.04.27
JDBC -2  (0) 2024.04.25
JDBC (Java Database Connectivity)  (0) 2024.04.24
Maven 실습  (0) 2024.04.22
Maven  (0) 2024.04.22