[20220921] JDBC 드라이버 설치 및 확인 방법, 데이터베이스와 연결하기

kangsun·2022년 9월 21일
0

Java

목록 보기
21/44

📌 JDBC

  • [JDBC]

    • Java Database Connection
    • 자바와 오라클DB(18c XE)를 연동
    • 자바에서 외부응용프로그램(Oracle DB, MariaDB등)을 연결하려면 드라이버가 있어야 함.
    • 오라클 DB 연결 드라이버(.jar)는 해당 사이트에서 다운받을 수 있으며
    • 만일, 오라클DB 서버가 설치되어 있다면 오라클DB 설치 폴더에 내장되어 있음
  • [Dynamic Web Project 생성]

    • 프로젝트 명 : basic02_jdbc
    • 팩키지명 : oop0921
    • 오라클 DB 연결 드라이버 저장 경로
      >>> C:\오라클설치경로\product\18.0.0\dbhomeXE\jdbc\lib
      >>> ojdbc8.jar 복사
      >>> /src/main/webapp/WEB-INF/lib/ojdbc8.jar 라이브러리 붙이기
  • [해당 프로젝트 우클릭]

    • Refresh
    • Validate
    • Project → Clean ...

    자주해서 리프레시 해주기

  • [오라클 DB 서비스 확인]

    • 명령프롬프트 → sqlplus system/1234
  • [연습 테이블 확인]
    > select from sungjuk;
    > select
    from tb_student;
    > select from tb_gwamok;
    > select
    from tb_sugang;


jdbc 연동 폴더 생성

1. 빈 공간 우클릭 → new → other

2. Web폴더의 Dynamic Web Project 선택 → Next

3. Project name 설정 → Next

4. Next 클릭

5. Generate web.xml deployment descriptor 체크 → Finish

6. Open Perspective 클릭

7. 폴더 생성 완료

8. 삭제하는 방법

  • 체크표시 하지않으면 백업본이 남게된다.

[파일명 특징]

  • .class 는 파일 1개씩 배포

  • .jar는 알집처럼 묶어서 배포할 수 있는 자료형

  • Content directory 는 frontend 단에 몰아넣는 폴더를 설정할 수 있다. (.cdd .js .html .jsp)

  • .xml 구조 :<password> </password>같은 커스텀 태그(사용자가 원하는 형태대로 만들 수 있다.)
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  • .xml 구조 :<password> </password>같은 커스텀 태그(사용자가 원하는 형태대로 만들 수 있다.)

  • 커스텀태그로 이루어져있다.

  • itwill은 웹사이트 이용자들이 접근할 수 있는 루트이고,
  • 밑에 src/main/webapp은 개발자들이나 사용자들이 외부에서 접근할 땐 프로젝트 이름으로 대신 접근하라는 의미

basic02_jdbc 파일 생성 후 패키지 생성하기

  • 그냥 src 폴더가 아닌 src/main/java 폴더 안에 패키지를 생성한다.

자바와 오라클DB 연결하기

  • 자바는 외부 프로그램을 연결시켜준다.
  • 오라클DB와 자바는 다른 프로그램이기 때문에 자동으로 연결시켜주지 않는다.
  • 오라클DB 연결 하기위해서는 오라클DB사이트에서 드라이버(.jar)를 설치해야함. (마리아 DB는 마리아 사이트에서)
  • 만일, 오라클DB 서버가 설치되어 있다면 오라클DB 설치 폴더에 내장되어 있음

오라클 DB 연결 드라이버 저장 경로

C:\app\itwill\product\18.0.0\dbhomeXE\jdbc\lib

  • 경로로 가서 압축 jar파일 복사해서,

  • setup 폴더 안에 붙여넣기하기

/src/main/webapp/WEB-INF/lib/ojdbc8.jar
라이브러리 붙이기

  • 자바 폴더에도 ojdbc8.jar 붙여넣기

잘 접속됐는지 명령 프롬프트로 확인

  • sqlplus system/1234 입력 후 엔터

  • 접속 성공창 확인

  • 연습테이블 확인
    > select * from sungjuk; 엔터
    > select * from tb_student; 엔터
    > select * from tb_gwamok; 엔터
    > select * from tb_sugang; 엔터


데이터베이스 연결하기

  • Test01_DBOpen 클래스 생성하기
  • Oracle DB 18c XE 연결 관련 정보

    - 컴퓨터에서 오라클 설치할 때 사용했던 기본 아이디 비밀번호(system / 1234)를 넣어준다.
    - 아이디 비밀번호는 설치시 기본으로 설정되어있는 아이디 비번임. 나중에 내가 바꿀 수 있는건가 ? ?


- 여기 경로를 diver 변수에 작성해준 것.

  • 드라이버 로딩 (그냥 공식)
    Class.forName(driver);
    - 길을 깔아주는 작업

  • 오라클 DB 서버 연결 (그냥 공식)
    DriverManager.getConnection(url, user, password);
    - 정보를 넘겨주는 작업

  • RUN 하기

- Run 클릭하면 Run as 창이 뜨는데 java Application 을 클릭하고 OK 눌러준다.
- password 나 user 잘 못 작성해주면 "오라클 DB 연결 실패 "와 에러메세지가 뜨게 된다.

  • 정상 연결시

  • 연결 실패시


번외


- 저 값들은 계속 추가해야하기 때문에 매번 생성하기엔 유지보수가 힘들다.
- 이 부분은 class안에 return값이 있는 함수를 생성해서 관리하면 편하다.


폴더 분류

  • src/main/java 는 백엔드단 폴더
  • src는 프론트엔드 폴더

Test02_insert : 행 추가

SQL 파일 생성

  • sql 파일은 실행 전까진 그냥 텍스트 파일로 분류된다.

SQL 테이블 행추가


SQL 작성 팁

- 맨앞에 띄어쓰기를 하지 않으면 앞의 문자열과 이어지는 문장으로 혼동하기 쉽다.

(↓ 해결방법)

- 맨 앞에 공백으로 한 칸 띄어주고 단어를 대문자로 바꿔주면 헷갈리지 않을 수 있다.


5) SQL형식으로 변환 (단순 명령어)
prepareStatement() : SQL 형식으로 변환시켜주는 명령어

- con변수는 최종 결과값을 출력해주는 변수인데, 그 최종 결과값을 sql 형식으로 변환시켜주는 코드를 짠다.
- prepareStatement()의 반환값이 CallableStatement이기떄문에

PreparedStatement pstmt =con.prepareStatement(sql.toString());

6) SQL문 실행 (단순 명령어)

executeUpdate(); : SQL문 실행시켜주는 명령어

- 반환형이 int 형이다.
- INSERT, UPDATE, DELETE를 반환한다.
- 행의 개수가 반환된다.
- 1개가 나오면 성공, 0개는 실패 (반환된 것이 아님)

  • excuteUpdate(); 명령어를 주고, 반환형이 int기 때문에 int 변수에 넣어준다.
int cnt =pstmt.executeUpdate();

Test03_update : 행 수정 (손흥민 평균값 0에서 수정)

준비 코드

- RUN하고 서버 연결까지 확인하기

- update 코드 작성해준 후
- sql 형식 변환,
- SQL문 실행 코드 작성 후
- if조건문으로 값이 0으로 반환되면 행수정 실패 문구가 출력되도록, 0이 아니면 행 수정 성공 문구 출력되도록 한다.

  • cmd 명령어 프롬프트에서 행 수정 확인


Test04_delete : 행 삭제 (손흥민 삭제)

  • 준비코드
package jdbc0921;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class Test04_delete {

	public static void main(String[] args) {
		// sunguk 테이블 행 추가 연습
		
		try {
			
			String url	   ="jdbc:oracle:thin:@localhost:1521:xe"; 
			String user	   ="system";
			String password="1234"; 
			String driver  ="oracle.jdbc.driver.OracleDriver";
			Class.forName(driver);
			Connection con =DriverManager.getConnection(url, user, password);//최종결과값 con 변수에 담기
			System.out.println("오라클 DB 서버 연결 성공!!");
			
			
			
			StringBuilder sql=new StringBuilder();
			sql.append("");


			
			
		} catch (Exception e) {
			System.out.println("실패" + e);
		}//end
		
		System.out.println("END");
		

	}//main() end

}//class end
  • 행 삭제하는 database 코드를 작성해준 후 RUN 해서 서버 연결 됐는지 확인.
sql.append(" DELETE FROM sungjuk WHERE sno=21");

  • 명령프롬프트에
    select * from sungjuk order by sno desc;
    입력해서 삭제됐는지 확인

- 21번째 손흥민이 삭제되었다 ㅎㅎ


Test05_insert : 행 추가 연습

  • 이렇게 행을 추가할 수도 있다.
  • 이런식으로 코딩을 해야한다.
package jdbc0921;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class Test05_insert {

	public static void main(String[] args) {
		// sunguk 테이블 행 추가 연습
		
		try {
			
			String url	   ="jdbc:oracle:thin:@localhost:1521:xe"; 
			String user	   ="system";
			String password="1234"; 
			String driver  ="oracle.jdbc.driver.OracleDriver";
			Class.forName(driver);
			Connection con =DriverManager.getConnection(url, user, password);//최종결과값 con 변수에 담기
			System.out.println("오라클 DB 서버 연결 성공!!");
			
			
			String name="박지성";
			int kor=99, eng=98, mat=100;
			String addr="Seoul";
			
			
			StringBuilder sql=new StringBuilder();
			sql.append(" INSERT INTO sungjuk(sno, uname, kor, eng, mat, addr, wdate)");
			sql.append("");

			
			
		} catch (Exception e) {
			System.out.println("실패" + e);
		}//end
		
		System.out.println("END");
		

	}//main() end

}//class end
  • setString(int 물음표의 인덱스숫자, string변수)

    - 반환형은 int
    - parameterIndex는 물음표의 순서에 따라 값을 지정해줄 수 있다.
    - 따라서 물음표의 순서와 칼럼의 순서를 일치시켜야 정확한 값이 나온다.

  • setInt(int 물음표의 인덱스숫자, Int변수)


- 물음표의 순서, 칼럼의 순서, 자료형을 일치시켜야한다.
- kor는 점수이기때문에 int형으로 함수로 바꿔줘야한다.

  • RUN 실행 후 cmd 가서 "박지성" 칼럼 행 추가 되었는지 확인하기


- java에서 작성한 박지성 칼럼이 추가되었다.


Test06_update

  • 문제) sno=23 행의 데이터를 아래의 내용으로 수정하시오.

- sno 23 박지성 칼럼 업데이트하기.

- update문은 물음표를 변수안에 넣어주어야 한다.
- 물음표의 개수만큼 setString(), setInt() 넣어주기.

  • cmd프롬프트로 행 수정되었는지 확인하기

<전체코드>

package jdbc0921;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class Test06_update {

	public static void main(String[] args) {
		// 문제) sno=23 행의 데이터를 아래의 내용으로 수정하시오.		
		
		int sno=23;
		String uname="JSPark";
		int kor=90, eng=85, mat=100;
		int tot=(kor+eng+mat);
		int aver=tot/3;
		String addr="Suwon";
		
		
		try {
			
			String url	   ="jdbc:oracle:thin:@localhost:1521:xe"; 
			String user	   ="system";
			String password="1234"; 
			String driver  ="oracle.jdbc.driver.OracleDriver";
			Class.forName(driver);
			Connection con =DriverManager.getConnection(url, user, password);//최종결과값 con 변수에 담기
			System.out.println("오라클 DB 서버 연결 성공!!");
			
			
			
			StringBuilder sql=new StringBuilder();
			sql.append(" UPDATE sungjuk");
			sql.append(" SET uname=? ");
			sql.append(" , kor=? ");
			sql.append(" , eng=? ");
			sql.append(" , mat=? ");
			sql.append(" , tot=? ");
			sql.append(" , aver=? ");
			sql.append(" , addr=? ");
			sql.append(" , wdate=sysdate ");
			sql.append(" WHERE sno=? ");
	
			
			PreparedStatement pstmt=con.prepareStatement(sql.toString());
			// → ? 의 개수, 순서, 자료형이 일치해야 한다.
			
			
			pstmt.setString(1, uname); 	
			pstmt.setInt(2, kor); 		
			pstmt.setInt(3, eng); 		
			pstmt.setInt(4, mat); 		
			pstmt.setInt(5, tot); 		
			pstmt.setInt(6, aver); 		
			pstmt.setString(7, addr); 
			pstmt.setInt(8, sno);

			
			int cnt=pstmt.executeUpdate();
			if(cnt==0) {
				System.out.println("행 추가 실패!!");
			}else {
				System.out.println("행 추가 성공~~");
			}//if end
			
			
		} catch (Exception e) {
			System.out.println("실패" + e);
		}//end
		
		System.out.println("END");
		

	}//main() end

}//class end
profile
코딩 공부 💻

0개의 댓글