package com.shopping.model.dao;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MemberDao {
private DataSource dataSource;
public MemberDao() {
try {
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/Oracle");
} catch (Exception e) {
e.printStackTrace();
}
}
public String printMemberIDs() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
String memberId = "";
connection = dataSource.getConnection();
// SQL 쿼리
String sql = "SELECT id FROM members";
preparedStatement = connection.prepareStatement(sql);
System.out.println(preparedStatement.getConnection());
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
memberId = resultSet.getString("id");
}
if (memberId.isEmpty()) {
System.out.println("No member ID found.");
}
return memberId;
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 리소스 해제
try {
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
preparedStatement.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "false";
}
}
프로그램이 실행되는 환경이나 상황에 대한 정보를 제공하고 관리하는 클래스
다양한 맥락에서 프로그램의 동작을 조정하거나 필요한 데이터를 제공하기 위해 사용
Context는 일종의 컨테이너로서 프로그램이 동작하는 동악 필요한 리소스를 저장하고 접근할 수 있도록 도와줌
Java Naming Directory Interface를 사용하여 context를 초기화하는 부분
JNDI는 Java 애플리케이션에서 네임스페이스를 사용하여 서버 리소스나 서비스에 접근하고 관리하는 방법을 제공하는 API
JNDI는 주로 데이터베이스 연결, 메시지 큐, 웹 서비스 등과 같은 서버 리소스를 관리하거나, 환경 변수나 설정 값 등을 접근하는데 사용
데이터베이스 커넥션 풀을 관리하기 위한 java 인터페이스
커넥션 풀은 데이터베이스 연결을 관리하고 재사용하는데 사용되며, 애플리케이션이 데이터베이스를 효율적으로 상호 작용할 수 있도록 도와줌
데이터베이스 커넥션 풀을 사용하면 연결 생셩과 해제에 드는 오버헤드를 줄이고, 애플리케이션의 성능을 개선할 수 있음.
java의 JDBC(Java Database Connectivity) API에서 제공하는 인터페이스
SQL 쿼리문을 미리 준비하고 실행하는데 사용되는 객체
1. SQL 인젝션 방지 : 파라미터 값을 자동으로 이스케이프하고 따옴표를 처리하여 SQL 인젝션과 같은 보안 취약점을 방지
2. 파라미터 사용 : SQL문에 변수처럼 파라미터 사용 가능
3. 캐시 활용 : 데이터베이스 시스템은 동일한 SQL문이 여러 번 실행될 경우 실행 계획을 캐시에 저장. SQL문이 여러번 실행될 때 실행 계획을 재사용하여 성능 향상
4. 타입 매칭 : 파라미터 값의 데이터 타입에 따라 자동으로 적절한 데이터타입으로 변환하여 SQL문에 적용
executeUpdate() 메서드를 통해 SQL 구문 실행
JDBC API에서 제공하는 인터페이스로, 데이터베이스에서 쿼리를 실행한 결과로 얻어진 결과 집합을 나타내는 객체
데이터베이스로부터 검색한 데이터를 가져오고 처리할 수 있음
executeQuery() 메서드로 쿼리를 실행