JDBC는 JAVA로 데이터베이스 프로그래밍을 하기 위한 라이브러리
Java 기반 애플리케이션의 데이터를 데이터베이스에 저장 및 업데이트하거나 저장된 데이터를 Java에서 사용할 수 있도록 하는 Java API이다.

java.sql, javax.sql을 사용
Driver : JDBC Driver 정보를 제공, DBMS와의 연결을 관리하는 객체를 리턴
Connection : DriverManager를 통해 데이터베이스와 연결되는 세션(Session)인 Connection 객체를 생성
Statement : 작성된 SQL 쿼리문을 실행하기 위한 객체로 정적 SQL 쿼리 문자열을 입력으로 가짐
executeQuery() : SELECT 문을 실행
executeUpdate() : INSERT, UPDATE, DELETE 등 DML, DDL 명령문을 실행
executeBatch() : 여러 개의 SQL을 실행할 때 사용 (SELECT, INSERT, UPDATE, DELETE 등 모든 SQL 명령문이 실행 가능)
ResultSet : 실행된 SQL 쿼리문에 대한 결과 Data Set

Connection 객체를 미리 생성하여 보관하고 애플리케이션이 필요할 때 꺼내서 사용할 수 있도록 관리해 주는 것이 Connection Pool
매번 Connection을 생성하는 것은 오버헤드가 크다. 따라서 DataSource를 통해 Connection Pool을 활용할 수 있다.

String sql = "select * from usertb where id = ?";
Connection conn = null;
PreparedStatement pstmt= null;
ResultSet rs = null;
InitialContext ic = null;
DataSource ds = null;
try {
ic = new InitialContext();
ds = (DataSource) ic.lookup("jdbc/testDB");
conn = ds.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "1");
rs = pstmt.executeQuery();
while (rs.next()) {
String userName = rs.getString("id");
System.out.println("User Name : " + userName);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}