JDBC

[JDBC] JDBC로 SQL 연동하기

동준1234 2025. 1. 22. 15:38

JDBC (Java Database Connectivity)는 자바 애플리케이션에서 데이터베이스와 상호작용할 수 있도록 해주는 Java API입니다. JDBC를 사용하면 데이터베이스에 연결하고, SQL 문을 실행하여 데이터를 조회하거나 수정할 수 있습니다. 


1. JDBC 드라이버 추가

JDBC를 사용하기 위해서는 데이터베이스와 연결을 관리하는 JDBC 드라이버를 프로젝트에 추가해야 합니다. 예를 들어, Oracle DB와 연결할 경우 ojdbc.jar 파일을 프로젝트에 포함해야 합니다. 이 과정은 다음과 같습니다:

  1. 프로젝트 우클릭PropertiesLibraries
  2. Add External JAR 버튼 클릭 → ojdbc.jar 파일 선택
  3. OK 버튼 클릭

ojdbc17.jar 클릭

JDBC 드라이버는 자바 애플리케이션이 데이터베이스와 연결할 수 있도록 해주는 중간 역할을 합니다. 각 DBMS에 맞는 드라이버를 추가해야 하며, 예를 들어 Oracle의 경우 ojdbc.jar 파일을 사용합니다.


2. JDBC 객체 설명

  • Connection: 데이터베이스와 연결을 관리하는 객체입니다. 데이터베이스에 연결하려면 Connection 객체를 사용하여 데이터베이스의 URL, 사용자 이름, 비밀번호 등의 정보를 제공해야 합니다.
  • Statement: SQL 문을 실행하는 데 사용되는 객체입니다. Statement 객체는 연결된 데이터베이스에 SQL 쿼리를 전달하고 결과를 받아옵니다. PreparedStatement는 성능 향상 및 SQL 인젝션을 방지하는데 유용한 Statement의 확장된 버전입니다.
  • ResultSet: SELECT 쿼리 결과로 반환되는 데이터셋을 관리하는 객체입니다. ResultSet 객체는 테이블의 행(Row)을 하나씩 조회할 수 있게 해줍니다.

 

3. JDBC 사용 순서

1) JDBC 드라이버 등록

자바 프로그램에서 JDBC를 사용하기 위해서는 JDBC 드라이버를 먼저 등록해야 합니다. Class.forName() 메서드를 사용하여 드라이버를 등록합니다.

이 코드는 Oracle 데이터베이스의 JDBC 드라이버를 로드하는 역할을 합니다. 각 DBMS마다 드라이버가 다르기 때문에 사용 중인 데이터베이스에 맞는 드라이버를 등록해야 합니다.

2) Connection 생성

Connection 객체를 생성하여 데이터베이스와 연결합니다. 연결하려는 데이터베이스의 URL, 사용자명, 비밀번호를 제공해야 합니다.

 

  • URL: 데이터베이스의 연결 URL
  • 사용자명비밀번호: 데이터베이스 인증 정보

3) Statement 생성

Statement 객체는 SQL 쿼리를 실행하는 데 사용됩니다. Connection 객체를 이용해 Statement 객체를 생성합니다.

4) SQL 문 실행

Statement 객체를 이용하여 SQL 문을 실행합니다. 

기존에 String sql = "INSERT INTO TEST VALUES(" + num + ", '" + name + "', SYSDATE)"; 로 문자열 배열을 만들었기 때문에 executeUdapte의 매개변수로 들어갑니다.

5) 트랜잭션 처리

트랜잭션은 데이터베이스의 일관성을 유지하기 위해 여러 SQL 작업을 하나의 작업 단위로 묶어 처리하는 것입니다. 트랜잭션을 완료하려면 commit()을 호출하고, 문제가 발생한 경우 rollback()으로 변경 사항을 취소합니다.

6) 자원 반납

마지막으로, 사용한 JDBC 객체들을 반드시 자원 반납해야 합니다. 데이터베이스 연결, Statement, ResultSet 객체는 사용 후 close() 메서드를 호출하여 자원을 반납해야 메모리 누수를 방지할 수 있습니다.


JDBC 사용 시 주의 사항

  1. 트랜잭션 관리: 자동 커밋이 비활성화된 상태에서 commit()을 호출하지 않으면 데이터가 실제로 데이터베이스에 반영되지 않으므로 주의해야 합니다.
  2. 자원 반납: Connection, Statement, ResultSet 객체를 사용한 후 반드시 close() 메서드를 호출하여 자원을 반납해야 합니다. 이를 finally 블록에서 처리하는 것이 좋습니다.
  3. SQL 인젝션 방지: PreparedStatement를 사용하여 SQL 인젝션 공격을 방지할 수 있습니다. PreparedStatement는 SQL 쿼리를 미리 컴파일하고, 값은 바인딩하여 전달합니다.