본문 바로가기

DataBase

[WEB]DAY29_DML 실습2, AS(별칭), NULL, Java와 DB연동

DML

--DML(DELETE, UPDATE) 실습

--PLAYER 테이블에서 TEAM_ID가 'K01'인 선수 이름을 내 이름으로 바꾸기
--ROLLBACK
SELECT * FROM PLAYER;

UPDATE PLAYER
SET PLAYER_NAME = '홍길동'
WHERE TEAM_ID = 'K01';

--PLAYER 테이블에서 POSITION이 'MF'인 선수 삭제하기
--ROLLBACK
DELETE FROM PLAYER
WHERE "POSITION" ='MF';

SELECT * FROM PLAYER;

--PLAYER 테이블에서 HEIGHT가 180이상인 선수 삭제하기
--ROLLBACK
DELETE FROM PLAYER
WHERE HEIGHT >= 180;

SELECT * FROM PLAYER;

 


AS(ALIAS)

: 별칭 

 

  - SELECT절 : 별칭을 ALIAS 뒤에 쓰거나, 공백문자 뒤에 쓴다. 
  - FROM절 : 공백문자 뒤에 쓴다.

 

SELECT PLAYER_ID AS "선수 번호", PLAYER_NAME 이름 FROM PLAYER;

--PLAYER테이블에서 선수이름을, TEAM테이블에서 주소를 검색
SELECT P.TEAM_ID , P.PLAYER_NAME, T.ADDRESS 
FROM PLAYER P, TEAM T;

--STADIUM테이블에서 ADDRESS를. TEAM테이블에서 TEL을 검색
SELECT S.ADDRESS AS "경기장 주소", T.TEL 전화번호
FROM STADIUM S, TEAM T; 

 

NULL

 : 정의되지 않은 값

  - 빈 값 대신 미정값을 부여할 때 사용(PK는 불가능, FK는 가능)
  - NVL : NULL값 대신 다른 값으로 변경 후 검색
  - NVL2 : NULL일 떄의 값, NULL이 아닐 때의 값 2가지를 설정

 

SELECT NVL(NICKNAME, '별명 없음') AS 별명 FROM PLAYER;

--PLAYER테이블에서 NATION이 NULL이면 미등록
--NULL이 아니면 등록으로 변경 후 선수이름, 국가 검색
--AS는 국가 등록 여부로 주기
--NVL2(컬럼명, NULL이 아닐 때, NULL일 때)
SELECT NVL2(NATION, '등록', '미등록') "국가 등록 여부", PLAYER_NAME 선수이름 
FROM PLAYER;

Java와 DB 연동하기

 


1. oracle에 USER TABLE을 만들기.

-----------------------------------------------------------------------------------
--USER테이블이 있다면 DROP
DROP TABLE "USER";
DROP SEQUENCE USER_SEQ;

--USER_SEQ 만들기
--1부터 시작, 1씩 증가, 1000까지
CREATE SEQUENCE USER_SEQ
INCREMENT BY 1
START WITH 1
MINVALUE 1
MAXVALUE 1000;

--USER테이블 만들기
--USER_NUMBER NUMBER NOT NULL
--ID VC2(20)
--PW VC2(20),
--NAME VC2(20),
--AGE NUMBER,
--PHONE_NUMBER VC2(11),
--PK는 ID컬럼에 부여
CREATE TABLE "USER"(
	USER_NUMBER NUMBER NOT NULL,
  ID VARCHAR2(20),
  PW VARCHAR2(20),
  NAME VARCHAR2(20),
  AGE NUMBER,
  PHONE_NUMBER VARCHAR2(11),
  CONSTRAINT USER_PK PRIMARY KEY(ID)
);

SELECT * FROM "USER";

SELECT COUNT(*) FROM "USER"
WHERE ID = 'hds9638';

INSERT INTO "USER"
(USER_NUMBER, ID, PW, NAME, AGE, PHONE_NUMBER)
VALUES(USER_SEQ.NEXTVAL, 'hgd1204', '1234', '홍길동', 20, '01012341234');

SELECT * FROM "USER";

TRUNCATE  TABLE "USER";

2. dao

 - DBConnection 클래스 (DB연결 클래스) 

 

jdbc  
: 키보드와 모니터 연결하면 드라이브를 설치하듯이  
데이터베이스를 사용하기 위해서 자바에 드라이브를 설치하는것 

localhost : 내 ip주소 
Class.forName() : 드라이브를 실행시켜주는 메소드 

 

Connection은 sql에 있는 것으로 사용해야함 !!

 

package dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
	//jdbc : Java Database Connectivity
	public static Connection getConnection() {
		Connection conn = null;
		//url, id, pw
		try {
			String url = "jdbc:oracle:thin:@localhost:1521:XE";
			String user = "hr";
			String pw = "hr";
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, user, pw);
			System.out.println("DB 연결 성공!");
		} catch (ClassNotFoundException cnfe) {
			System.out.println("드라이버 로딩 실패");
		} catch (SQLException sqle) {
			System.out.println("DB 접속 실패");
		} catch (Exception e) {
			System.out.println("알 수 없는 오류");
		}
		return conn;
	}
}

 

3. vo

 - DB에 있는 data값들.

package vo;

public class UserVO {
	private String user_number;
	private String id;
	private String pw;
	private String name;
	private int age;
	private String phone_number;
	
	public UserVO() {}

	public String getUser_number() {
		return user_number;
	}

	public void setUser_number(String user_number) {
		this.user_number = user_number;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getPhone_number() {
		return phone_number;
	}

	public void setPhone_number(String phone_number) {
		this.phone_number = phone_number;
	}
	
}

 


 

3. dao

  - 사용할 메소드

 

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import vo.UserVO;

public class UserDAO {
	Connection conn;
	PreparedStatement pstm;
	ResultSet rs;
	UserVO user;
	
	private final int KEY = 3;

	// 아이디 검사
	public boolean checkId(String id) {
		String query = "SELECT COUNT(*) FROM \"USER\"" + " WHERE ID = ?";
		boolean check = true;
		try {
			conn = DBConnection.getConnection();
			pstm = conn.prepareStatement(query);
			pstm.setString(1, id);
			rs = pstm.executeQuery();
			// ResultSet객체는 결과를 가져오기 전 next()메소드를
			// 반드시 사용해주어야 한다.
			rs.next();
			if (rs.getInt(1) == 0) {
				check = false;
			}
		} catch (SQLException sqle) {
			System.out.println("checkId() 쿼리문 오류");
		} catch (Exception e) {
			System.out.println("알 수 없는 오류(checkId())");
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (pstm != null) {
					pstm.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				throw new RuntimeException(e.getMessage());
			}
		}
		return check;
	}

	// 회원가입
	public boolean join(String id, String pw, String name, int age, String phone_number) {
		String query = "";
		boolean check = false;
		if (!checkId(id)) {
			query = "INSERT INTO \"USER\" (USER_NUMBER, ID, PW, NAME, AGE, PHONE_NUMBER) "
					+ "VALUES(USER_SEQ.NEXTVAL, ?, ?, ?, ?, ?)";

			try {
				int idx = 0;
				conn = DBConnection.getConnection();
				pstm = conn.prepareStatement(query);
				pstm.setString(++idx, id);
				pstm.setString(++idx,encrypt(pw));
				pstm.setString(++idx, name);
				pstm.setInt(++idx, age);
				pstm.setString(++idx, phone_number);
				pstm.executeQuery();
				check = true;
				
			} catch (SQLException sqle) {
				System.out.println(sqle);
				System.out.println("checkId() 쿼리문 오류");
			} catch (Exception e) {
				System.out.println(e);
				System.out.println("알 수 없는 오류(join())");
			} finally {
				try {
					if (rs != null) {
						rs.close();
					}
					if (pstm != null) {
						pstm.close();
					}
					if (conn != null) {
						conn.close();
					}
				} catch (SQLException e) {
					throw new RuntimeException(e.getMessage());
				}
			}
		}
		return check;
	}
	
	//암호화
	public String encrypt(String pw) {
		String en_pw = "";
		for (int i = 0; i < en_pw.length(); i++) {
			en_pw += (char)(pw.charAt(i)*KEY);
		}
		return en_pw;
	}
	//복호화
	public String decrypt(String en_pw) {
		String de_pw = "";
		for (int i = 0; i < en_pw.length(); i++) {
			de_pw += (char)(en_pw.charAt(i)/KEY);
		}
		return de_pw;
	}
	// 로그인
	// 수정
	// 삭제
	// 검색
	// 목록
	// 아이디 찾기
	// 비번 찾기
}

 

-------- 단축키 --------

ctrl+ ] : sql파일 새로만들기

--------------------------

TO DO LIST

 

?) String url = "~" : ~ 이부분도 경로인지.. 어디경로

 

?) Class.forName("oracle.jdbc.driver.OracleDriver")

   A) Oracle 드라이버 로딩.

      Class.forName("oracle.jdbc.driver.OracleDriver") 은 드라이버들이 읽히기만 하면

      자동 객체가 생성되고 DriverManager에 등록된다.

 

?) conn = DriverManager.getConnection(url, id, pw);

   A) Connection 객체 생성 + 접속 작업.

 


참고사이트

 

https://hyeonstorage.tistory.com/110

 

[JSP] JDBC를 사용한 데이터베이스 연동

JDBC를 사용한 데이터베이스 연동 1. JDBC (Java Database Connectivity) - JDBC는 자바 프로그램과 관계형 데이터 원본에 대한 인터페이스이다. JDBC 라이브러리(Library)는 관계형 데이터베이스에 접근하고, SQL..

hyeonstorage.tistory.com

 

https://sas-study.tistory.com/116

 

[JDBC] 오라클과 JDBC 연결하는 방법

JDBC, Java Database Connectivity - 자바응용프로그램( 콘솔, 웹, 모바일 등..) 과 데이터베이스시스템(오라클,MySQL 등..)간의 연결을 시켜주는 역할 - 이전에는 -> 사람(유저) <-> SQL Developer(클라이언트 툴..

sas-study.tistory.com

 

'DataBase' 카테고리의 다른 글

[WEB]DAY28_DDL, DML 예제 및 실습  (0) 2020.04.20
[WEB]DAY27_DBeaver, SQL문  (0) 2020.04.17
[WEB]DAY26_RDBMS, 오라클 다운  (0) 2020.04.16