tokkaiiii 2025. 4. 13. 18:49

1. 등장배경

웹 서비스나 모바일 어플을 사용하면 각 서비스들이 사용자의 데이터를 알고있다.

이 데이터는 일반적으로 데이터베이스에 저장돼서 조회하여 보여준다.

그런데 이러한 데이터베이스는 종류가 많다.

Oracle, MySQL, PostgreSQL 등 다양하다.

이 데이터베이스에 접근하기 위한 연결 방법 또한 각양각색이다. 데이터베이스 접속방법을 추상화한 인터페이스가 JDBC 이다.

2. DB 커넥션

public static Connection getConnection()  {
    try {
      Connection connection = DriverManager.getConnection(
      			jdbc:mysql://ip:port/schema, 
                	USERNAME, 
                	PASSWORD);
      return connection;
    } catch (SQLException e) {
      throw new RuntimeException(e);
    }
  }

위 코드와 같이 java.sql 에 있는 DriverManager 클래스에 있는 메소드를 사용합니다. 그러면 커넥션을 얻을 수 있고 이 커넥션을 통해 여러 쿼리를 만들 수 있습니다.

 

 @CallerSensitive
    public static Connection getConnection(String url,
        String user, String password) throws SQLException {
        java.util.Properties info = new java.util.Properties();

        if (user != null) {
            info.put("user", user);
        }
        if (password != null) {
            info.put("password", password);
        }

        return (getConnection(url, info, Reflection.getCallerClass()));
    }

DriverMager 클래스에 있는 getConnection 메소드의 구체적인 코드입니다. 이걸 사용하면 됩니다. 파라미터는 url, user ,password 이 세가지를 받습니다.

3. DB 조회

 public Member findById(String memberId) throws SQLException {
    String sql = "select * from member where member_id = ?";
    Connection con = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    try {
      con = getConnection();
      pstmt = con.prepareStatement(sql);
      pstmt.setString(1, memberId);
      rs = pstmt.executeQuery();
      if (rs.next()) {
        Member member = new Member();
        member.setMemberId(rs.getString("member_id"));
        member.setUsername(rs.getInt("username"));
        return member;
      } else {
        throw new NoSuchElementException("member not found memberId=" + memberId);
      }
    } catch (SQLException e) {
      log.error("db error", e);
      throw e;
    } finally {
	JdbcUtils.closeResultSet(rs);
    	JdbcUtils.closeStatement(stmt);
    	JdbcUtils.closeConnection(con);
    }
  }

getConnection 으로 connection 을 받고 DB 쿼리를 날리고 사용이 끝나면 자원정리를 한다.

finally 로 ResultSet, Statemane, Connection 을 닫으면 된다.