비전공자들을 위한 자바 DB 연동방법, 외부 라이브러리 연동방법

WON HOYEON·2024년 7월 16일

💡 JAVA에서 DB연결 방법

[1] 드라이버 로드

로드하고 싶은 프로젝트 우클릭 후
Bulid Path 선택 후 Configure Bulid Path... 선택

java Build Path창이 뜨면
Classpath 선택 후 Add External JARs 선택

ojdbc.jar 파일 열기

JDBC 드라이버 로딩 완료

물리 폴더 WebContent -> lib 폴터안에 복사 붙여넣기

[2] Connection DB 연결

Class.forName을 사용하여 Driver 클래스를 로딩하여 객체를 생성 (생성된 객체는 DriverManager에 등록)

String user = "scott" : DB연동 아이디
String password = "tiger" : DB연동 비밀번호
String ur1 = "jdbc:oracle:thin:@localhost:1521:xe :
내서버의 ip localhost, 1521(포트번호)
xe (오라클버전)

DriverManager.getConnecion()메소드로 Connection 객체를 생성

DriverManager.getConnecion()은 ur1 , user , password를 매개변수로 갖음

[3] Statement SQL쿼리 실행

실행할 SQL문을 작성해 SQL쿼리를 실행가능

conn = DBConnect.getConnection(); :
목적 : 데이터베이스에 연결을 설정한다
DBConnect.getConnection()메소드는 데이터베이스 연결 객체를 반환한다.
이 메서드는 URL, 사용자명, 비밀번호 등을 사용하여 Connection객체를 생성한다
이 객체를 통해 SQL 쿼리를 실행하고 결과를 처리할 수 있다.
ps = conn.prepareStatement(sql); :
목적 : SQL 쿼리를 실행하기 위한 PreparedStatement객체를 생성
conn.prepareStatement(sql) 메서드는 SQL 객체를 PreparedStatment 객체로 변환한다
쿼리문을 사전에 컴파일하고 실행시 파라미터를 설정할 수 있는 객체
prepareStatement()메소드를 SQL문에 전달해
prepareStatement객체를 생성

setString()메소드로 SQL문의 ?에 값 입력
ps.setInt, setString을 사용해 쿼리에 맞는 타입으로 변환 후 값 입력
(위의 예제는 쿼리문의 순서대로 작성하여 age가 1번 region 2번 3번이 name이 됨)

execute()메소드를 사용해 SQL쿼리 실행 후 결괏값을 저장함
만약,select 구문을 실행시켰다면, ResultSet객체로 값을 리턴 받은 후 next()메소드와 getlnt,getString()등의 메소드를 통해 값을 가져올 수 있음

데이터를 불러오면 SQL에서 1이 반환되어
데이터 수정성공 출력
실패하면 0이 반환되어
데이터 수정 실패 출력

[4] DB close()로 연결 해제

닫아야할 자원의 값이 null이라면 에러가 발생하므로 try catch문으로 예외처리

SQL CRUD란?

  • Create (생성) : 새로운 데이터 레코드를 데이터베이스에 삽입 (insert쿼리)

  • Read (읽기) : 데이터베이스에서 데이터를 조회한다 (SELECT쿼리)

  • Update (업데이트) : 기존의 데이터를 수정한다 (UPDATE 쿼리)

  • Delete (삭제) : 데이터베이스에서 데이터를 삭제한다 (DELETE쿼리)

Create (insert쿼리)

  • 리턴 타입 : int

Read (읽기): SELECT 쿼리

  • 리턴 타입: 다양한 타입

Update (업데이트): UPDATE 쿼리

  • 리턴 타입: int

Delete (삭제): DELETE 쿼리

  • 리턴 타입: int

SQL 쿼리 문자열 정의

String sql = "INSERT INTO sample(no, name, reg_date) VALUES (sample_seq.nextval, ?, SYSDATE)";

1) INSERT INTO sample : 테이블에 데이터를 삽입

2) VALUES (sample_seq.nextval, ?, SYSDATE): no는 시퀀스 sample_seq.nextval을 사용하여 자동으로 증가(생성)
3) reg_date는 현재 날짜와 시간을 (SYSDATE)를 사용

4) PreparedStatement ps = conn.prepareStatement(sql); : PreparedStatement 객체 생성

5) ps.setString(1, "김씨");: 쿼리 내 첫 번째 ? 자리(즉, name 컬럼)에 "김씨"라는 값을 설정
1은 첫번 째 파라미터의 인덱스이다. ex) name , id , pw (파라미터의 인덱스 1, 2, 3 )

6) int result = ps.executeUpdate(); : 실행 결과로 영향받은 행의 수를 반환
쿼리로 영향을 받은 행의 수를 반환, 데이터가 성공적으로 삽입되면 값은 1이상의 정수

7) 예외처리 :
if (result > 0) {
System.out.println("데이터 추가 완료");
} else {
System.out.println("데이터 추가 실패");
}

8) ps.close(); 자원 해제

// SQL 쿼리 문자열 정의
String sql = "INSERT INTO sample(no, name, reg_date) VALUES (sample_seq.nextval, ?, SYSDATE)";

// PreparedStatement 객체 생성
PreparedStatement ps = conn.prepareStatement(sql);

// ? 자리에 동적으로 값을 설정
ps.setString(1, "김씨"); // 첫 번째 ?에 "김씨" 값을 설정

// 쿼리 실행
int result = ps.executeUpdate(); // 실행 결과로 영향받은 행의 수를 반환

// 결과 처리
if (result > 0) {
    System.out.println("데이터 추가 완료");
} else {
    System.out.println("데이터 추가 실패");
}

// 자원 해제
ps.close();

Select를 실행시키는 법

executeQuery() :

  • 용도 : 데이터 베이스에서 데이터를 조회하는 쿼리(SELECT)를 실행할때 사용
    리턴 타입 : ResultSet
String sql = "SELECT * FROM users";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql); // ResultSet 객체 반환

ResultSet 객체사용

  • SELECT 쿼리의 실행결과를 담고 있음

while (rs.next()) :

  • 행을 조회하고 다음 행으로 이동하면서 모든 행을 순회할때까지 반복
  • 더 이상 행이 없으면 false를 반환

int userId = rs.getInt("id");
: 컬럼 이름으로 정수값 추출
int userId = rs.getInt(1);
: 컬럼 인덱스로 정수값 추출 (1은 첫 번째 컬럼)

String userName = rs.getString("name");
: 컬럼 이름으로 문자열값 추출
String userName = rs.getString(2);
: 럼 인덱스로 문자열값 추출 (2는 두 번째 컬럼)

Date regDate = rs.getDate("reg_date");
: 컬럼 이름으로 날짜값 추출
Date regDate = rs.getDate(3);
: 컬럼 인덱스로 날짜값 추출 (3은 세 번째 컬럼)

새로 알게 된 것

테이블 크기 순서
table > tr > td == th

tr : 한 줄 생성
td , th : 영역 생성

테이블 한정 스타일을 넣지 않고 border 주기 가능
<table border="2">

profile
分からなかったことを整理し、後から見返すための記録です。

0개의 댓글