back-end/java

JDBC 데이터베이스 연결

study-minjeong 2024. 2. 28. 14:01

데이터베이스 연결 여부를 확인하는 기능을 만들 때 사용하기 위해서 공부한 내용이다. 

 

 

 

JDBC는 java에서 데이터베이스를 연결하여, 사용할 수 있도록 하는 자바 api이다.

jdbc는 sql문을 애플리케이션으로부터 받아 dbms와의 접속을 시도하고, dbms에서 나온 결과를 애플리케이션으로 다시 가져다준다.

 

 

JDBC 연결 과정을 알아보자!

 

1. Driver를 로드

Class.forName("jdbc 드라이버 이름");

 

사용하고자 하는 JDBC 드라이버를 등록해준다. 

예를 들어, mysql인 경우 com.mysql.jdbc.Driver이고, postgresql인 경우 org.postgresql.Driver이 된다.

JDBC 드라이버는 DriverManager 클래스를 통해 로딩된다.

 

 

 

2. DB 연결을 위한 Connection 객체 생성

Connection con = DriverManager.getConnection(DbUrl, "id", "pw");

 

DriverManager를 통해 데이터베이스와 연결되는 세션인 Connection 객체를 생성한다.

연결 결과를 Connection 객체에 담는다.

url은 형식에 맞춰 입력해준다. mysql인 경우 "jdbc:mysql://localhost:3306/db이름"이고, postgresql인 경우 "jdbc:postgresql://localhost:3306/db이름" 형식이다. 

 

 

 

3. 쿼리문 실행을 위한 Statement 객체 생성

Statement stmt = con.createStatement();

 

Statement 객체로 정적인 쿼리를 처리할 수 있다. 

쿼리문을 처리하기 위해서 executeUpdate(), executeQuery() 메소드를 사용한다.

 

 

PreparedStatement로 데이터를 동적할당해 쿼리를 작성할 수 있다.

String sql = "insert into NOTICE(TITLE, WRITER_ID) values (?,?)";

PreparedStatement st = con.prepareStatement(sql);
st.setString(1, title); 
st.setString(2, writerId);

 

?에 값을 할당해준다.

반환하는 값은 영향을 끼친 row의 수이다. 

 

 

* 쿼리를 작성할 때 주의사항!

세미콜론은 제외하고 작성한다.

조회할 때 모든 칼럼을 가져오는 것보다는 가져와야할 컬럼을 직접 명시하는 것이 좋다.

java 코드로 후작업하는 것을 지양한다.

 

 

 

4. 결과 저장을 위한 ResultSet 객체 생성

ResultSet rs =stmt.executeQuery(sql);

 

executeQuery()를 통해 쿼리를 실행하면 ResultSet 타입으로 반환하여 결과값을 저장할 수 있다.

insert는 반환되는 데이터가 없으므로 ResultSet 객체가 필요하지 않다.

저장된 값을 타입을 지정해, 한 행 단위로 불러올 수 있다.

 

 

 

5. 생성했던 객체들을 Close()

stmt.Close();
con.Close();

 

생성된 객체들을 사용한 역순으로 연결을 종료한다.

 

 

 

** 쿼리를 수행할 때 동적으로 할당해야 하는 값이 있으면 PreparedStatement 객체 사용, 없으면 Statement 객체 사용한다.

** 쿼리의 결과가 있으면 executeQuery() 메서드 호출하여 ResultSet 객체에 담고, 결과가 없으면 executeUpdate() 메서드를 호출하여 int형 변수에 결과값을 할당해준다.