참고) 자바문서_java.sql
https://docs.oracle.com/en/java/javase/17/docs/api/java.sql/java/sql/package-summary.html
오라클 : ojdbc11.jar
ㄴ 11버전에서 JAR파일 제공?
Class.forName("oracle.jdbc.driver.OracleDriver");
예시)
예시)
예시)
ㄴ 프로시저 생성
ㄴ 프로시저 호출
1) JDBC 드라이버 로딩하기
2) Connection 객체 생성하기
3) 데이터베이스 연결 닫기
Connection
Statement createStatement();
예시)
ㄴ sql문 실행 가능(DML)
예시)
package exam01;
import org.junit.jupiter.api.Test;
import java.sql.*;
public class Ex01 {
@Test
void test1() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// String url = "jdbc:oracle:thin:@localhost:1521:EE"
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "STUDY"; // SCOTT
String password = "oracle"; // tiger
try (Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
String sql = "INSERT INTO MEMBER (USER_NO, USER_ID, USER_PW, USER_NM, MOBILE) VALUES (SEQ_MEMBER.NEXTVAL, 'USER02', '123456', '사용자02', '01000000000')";
int cnt = stmt.executeUpdate(sql);
System.out.println(cnt);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
void test2() {
try {
// 오라클 드라이버 동적 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "STUDY"; // SCOTT
String password = "oracle"; // tiger
try(Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
String sql = "SELECT * FROM MEMBER";
ResultSet resultSet = stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
예시)
ㄴ 반환값 1 : 1개 레코드가 반영되었다
Connection
PreparedStatement prepareStatement(String sql);
값이 할당될 부분은 SQL에 ?로 기입
참고) Interface PreparedStatement
https://docs.oracle.com/en/java/javase/17/docs/api/java.sql/java/sql/PreparedStatement.html
예시) set자료형(int ?의 위치 번호, 값);
1) 프로시저 실행시 사용
ㄴ 커서이동하면서 가져오기
ㄴ 1번째꺼 : 순서대로 가져오기
ㄴ 2번째꺼 : 필드명으로 가져오기
예시) 자료형 get자료형(int 칼럼 순서번호);
예시) 자료형 get자료형(String 칼럼명);
: 컬럼명으로 가져오기
void test2() {
try {
// 오라클 드라이버 동적 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "STUDY"; // SCOTT
String password = "oracle"; // tiger
try(Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement()) {
String sql = "SELECT * FROM MEMBER";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) {
long userNo = rs.getLong("User_NO");
String userId = rs.getString("USER_ID");
String userPw = rs.getString("USER_PW");
String userNm = rs.getString("USER_NM");
String mobile = rs.getString("MOBILE");
LocalDateTime regDt = rs.getTimestamp("REG_DT").toLocalDateTime();
System.out.printf("USER_NO:%d, USER_ID:%s%n, USER_PW%s, USER_NM%s, MOBILE%s, REG_DT%s%n", userNo, userId, userPw, userNm, mobile, regDt);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
ㄴ 반환값 쳌
ㄴ 프리페어스테이트먼트의 두번째 매개변수 가리킴 = 기본키로 추출할 부분 정의
ㄴ ds.setTestWhileIdle(true); // 연결 객체가 유휴 상태일때 연결상태 체크
ㄴ 디비는 작동을 오래 안하고 있으면 작업의 효율성을 위해 객체 참조 끊어버림
ㄴ 그거 연결 끊겼나 확인할라고 쓴 코드
ㄴ 연결 끊겼으면 새로 객체 생성