JDBC이란?

  • JDBC는 Java Database Connectivity의 약자.
  • JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 연결하고 SQL 쿼리를 실행하는 표준 API.
  • 자바 프로그램이 데이터베이스와 대화할 수 있게 도와주는 도구이다.
  • 자바프로그램이 데이터베이스에 있는 정보를 가져오거나 저장할 수 있게 해주는 통로.

구조 설명

  • 자바코드 -> JDBC Interface -> JDBC Driver -> DB 서버(MySQL/Oracle)
  • 각 드라이버는 특정 DBMS에 맞춰져 있으며,JDBC 인터페이스를 통해 일관된 방식으로 데이터베이스와 통신한다.

JDBC API의 개념

  • JDBC API란 무엇인가?
    1) JDBC API는 자바 프로그램이 데이터베이스와 통신할 수 있도록 도와주는 일종의 다리.
    즉. 비종속적인 영역(애플리케이션)과 종속적인 영역(DBMS)사이에서 중간 역할을 수행하는 표준 인터페이스이다.
    2) 자바 프로그램이 데이터베이스와 안전하게 대화할 수 있게 도와줌

    구조 설명
    애플리케이션 <-> JDBC API(java.sql) <-> JDBC 드라이버 <-> 데이터베이스
    JDBC 드라이버는 DBMS에 종속적인 영역으로 , 특정 데이터베이스와의 연결 및 상호작용을 처리한다.

  • 어떻게 작동하나?
    1) 애플리케이션이 JDBC API를 통해 데이터베이스에 연결한다.
    2) 이때, JDBC 드라이버가 필요한데, 이것은 데이터베이스와 자바 프로그램을 연결해주는 역할을한다.

다양한 데이터베이스 연결

  • JDBC는 어떻게 다양한 데이터베이스와 연결되나?
    1) JDBC는 여러 종류의 데이터베이스와 연결될 수 있다. 예를 들어, Oracle.MYSQL.MariaDB,SQL Server 등이 있ㄷ.
    2) 자바 프로그램은 JDBC를 통해 어떤 종류의 데이터베이스와도 연결할 수 있다.
  • 왜 이렇게 많은 데이터베이스와 연결할 수 있나?
    : JDBC는 표준 인터페이스를 사용하기 때문에 다양한 데이터베이스와 쉽게 연결이 가능하다.

구조 설명

  • 애플리케이션 -> JDBC 인터페이스 -> 각 DBMS에 맞는 JDBC드라이버 -> 데이터베이스
  • 이는 데이터베이스 관리 시스템(DBMS)의 종류에 따라 동일한 코드로 다양한 데이터베이스에 접근할 수 있게 해준다.

왜 쓰나?

  • 데이터베이스와 상호 작용하여 데이터를 저장,조회,업데이트,삭제하기 위해 사용
  • 다양한 데이터베이스(MYSQL,Oracle,PostgreSQL)와 독립적으로 작동 가능.
  • 우리가 프로그램을 만들 때, 데이터를 저장하거나 불러와야 할 때 사용.
  • 만약 쇼핑몰의 쇼핑구매내역을 저장하고 싶다면 이것을 데이터베이스에 저장할 수 있다.
    이때, JDBC를 사용해서 데이터를 저장하고 불러온다.

어떻게 써?

1.JDBC 드라이버 준비. => 데이터베이스에 연결하기 위한 도구 준비

java

Class.forName("com.mysql.cj.jdbc.Driver");

2.데이터베이스에 연결 : 프로그램과 데이터베이스를 연결

java

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password");

3.SQL 쿼리 실행 : 데이터를 가져오거나 저장하는 명령어를 사용

java

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");

4.결과 처리 : 가져온 데이터를 프로그램에서 사용.

java

while (rs.next()) {
   System.out.println(rs.getString("username"));
}

5.연결종료

java

rs.close();
stmt.close();
conn.close();

사용시 유의 점

  • SQL 인젝션 방지 : PreparedStatement를 사용하여 SQL 인젝션 공격을 방지한다.
  • 리소스 관리 : 사용이 끝난 Connection, Statement, ResultSet 객체는 반드시 닫아야한다.
  • 예외처리 : SQLException을 적절히 처리하여 프로그램이 안정적으로 실행되도록 한다.
java 

try {
   Connection conn = 
DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password");
    //sql 작업 수행
} catch (SQLException e) {
     e.printStackTrace();
} finally {
     try { if (conn ! = null) conn.close(); } catch (SQLException e) 
     {e.printStackTrace(); }
}

예외 처리를 하는 코드를 뜯어볼까? - 각 코드에 대한 개념, 사용법, 유의점, 장단점

  1. try{...}catch(SQLException e){...}finally{...}
  • 개념 : 예외처리 (Exception Handling)
  • 사용법 : 예외가 발생할 수 있는 코드를 try블록 안에 작성하고, 예외가 발생했을 때의 처리를 catch 블록에 작성하며, 리소스를 정리하리는 코드를 finally 블록에 작성한다.

여기서 잠깐! 리소스를 정리하는 코드는 뭐야?
리소스를 정리하는 코드는 데이터베이스 연결과 같은 외부 자원을 사용한 후 이를 해제하는 코드이다. 리소스를 정리하지 않으면 메모리 누수나 데이터베이스 연결 고갈 등의 문제가 발생할 수 있다.
이를 방지하기 위해 사용한 리소스를 항상 적절히 정리해야 한다.
1.finally블록: 의미- try블록이 끝난 후 항상 실행되는 코드 블록. 예외가 발생하든 그렇지 않든 항상 실행된다. 이유- 예외 발생 여부와 관계업시 리소스를 정리하기 위해 사용한다.
2.if(conn!=null) conn.close(); : 의미- 데이터베이스 연결 객체 conn이 null이 아닌경우 conn.close()를 호출하여 연결을 닫습니다. 이유: conn이 null이 아닌경우에만 close()를 호출하여 NullPointerException을 방지하고, 데이터베이스 연결을 해제한다.
3.catch(SQLException e): 의미 - conn.close()호출 중 발생할 수 있는 SQLException을 처리합니다. 이유- close()호출 중에도 예외가 발생할 수 있기 때문에 이를 처리하여 프로그램이 비정상적으로 종료되지 않도록 합니다.

  1. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","username","password");
  • 개념 : 데이터베이스 연결(Database Connection)
  • 사용법 : DriverManager.getConnection메서드를 사용하여 데이터베이스에 연결합니다.
  • 이유 : 데이터베이스와 애플리케이션 간의 통신을 설정하기 위해 사용합니다.
  • 유의점 : 데이터베이스 URL,사용자 이름, 비밀번호를 정확히 입력해야 합니다. 보안 문제로 비밀번호를 코드에 직접 포함하는 것을 피해야 합니다.
  • 장점 : 데이터베이스와의 연결을 쉽게 설정할 수 있습니다.
  • 단점 : 잘못된 연결 정보로 인해 예외가 발생할 수 있습니다. 연결이 성공할 때까지 블로킹 될 수 있습니다.

3.catch(SQLException e){e.printStackTrace();}

  • 개념: SQL 예외 처리(SQLException Handling)
  • 사용법 : SQLException 예외를 catch 블록에서 잡아 예외 내용을 출력합니다.
  • 이유 : SQL 작업 중 발생할 수 있는 예외를 처리하여 프로그램이 예외 상황에서 중단되지 않도록 합니다.
  • 유의점 : 예외를 로깅하거나 사용자에게 알리는 등 적절히 처리해야 합니다.printStackTrace()는 개발 중에는 유용하지만, 프로덕션 환경에서는 로깅 프레임워크를 사용하는 것이 좋습니다.
  • 장점 : 예외 정보를 제공하여 디버깅에 도움이 됩니다.
  • 단점 : 예외를 단순히 출력하는 것은 사용자가 이해하기 어려운 정보를 노출할 수 있습니다.
  1. finally{if(conn!=null)conn.close();}
  • 개념: 리소스 정리(Resource Cleanup)
  • 사용법: finally블록에서 데이터베이스 연결을 닫아 리소스를 해제합니다.
  • 이유 : 데이터베이스 연결을 해제하여 리소스 누수를 방지합니다.
  • 유의점 : conn.close()호출시 예외가 발생할 수 있으므로 추가적인 예외 처리가 필요합니다.
  • 장점 : 항상 리소스를 정리하여 메모리 누수를 방지합니다.
  • 단점 : 리소스를 닫는 과정에서 예외가 발생할 수 있습니다.

전체적 논리적 흐름
1.데이터베이스 연결 시도 : DriverManager.getConnection을 사용하여 데이터베이스에 연결합니다.
2.SQL작업 수행 : try블록 안에서 데이터베이스와 관련된 작업을 수행합니다.
3.예외처리 : catch블록에서 SQL작업 중 발생한 SQLException을 처리합니다.
4.리소스 정리: finally블록에서 데이터베이스 연결 객체 conn이 null이 아닌경우 close()를 호출하여 연결을 닫습니다.

JDBC는 자바 애플리ㅔ이션이 데이터베이스와 상호 작용할 수 있게 해주는 강력한 도구이다.
이를 통해 데이터를 효율적으로 관리하고 처리할 수 있다.

0개의 댓글