DAY_040[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 11월 23일
0

국비과정

목록 보기
41/99

 🌞 Day 040 

  • MySQL

 🐬 제목1 

 🌱 Workbench에서 table 만들기 

  • Workbench에서 scott스키마에서 table을 오른쪽 클릭해서 create table을 클릭
    → 마우스클릭으로 편리하게 테이블 생성가능

 🌱 이클립스에서 테이블 만들기 

  • 이클립스에서 MySQL연결하기
    : 오라클 DB 처음 연결하는 것과 똑같음, 새로운 DB생성하고 다운받은 jar파일 추가하고
    다만 MySQL에서는 스키마 이름이 중요함, url에 마지막은 스키마 이름 넣을 것
    (기본값으로 database로 되어있음)

  • Workbench에서 scott스키마에서 table을 오른쪽 클릭해서 create table을 클릭
    → 마우스클릭으로 편리하게 테이블 생성가능 → apply를 클릭하면 아래처럼 명령문이 나옴

  • 그대로 복사해와서 DB와 연결한 spl파일에서 붙여 넣고 실행하면 됨


 🍂 MySQL과 오라클의 차이점 

  • AUTO_INCREMENT : 오라클의 sequence를 대시하는 자동 숫자 증가 옵션

  • VARCHAR2는 없고, VARCHAR가 가변 길이 문자를 나타낸다.

  • CONSTRAINT 없이 제약 사항을 표시한다.

  • 테이블 이름 앞에 스키마이름. 을 반드시 붙여서 사용해야 한다.


 🍂 MySQL에서 자주 쓰는 자료형 

  • INT : 정수형 자료형(FLOAT, DOUBLE은 실수)

  • VARCHAR : 문자열 자료형, 가변 길이(CHAR는 고정 길이)

  • TEXT : 긴 문자열은 TEXT로 별도 저장

  • DATETIME : 날짜 자료형 저장

  • TINYINT
    : -128에서 127까지 저장하지만 여기서는 1또는 0만 저장해서 Boolean값 표현


 🍂 MySQL에서 자주 쓰는 제약 조건 

  • NOT NULL : 빈 값은 받지 않는다는 뜻(NULL은 빈 값 허용)

  • AUTO_INCREMENT
    : 숫자 자료형의 경우 다음 로우가 저장될 때 자동으로 1 증가

  • UNSIGNED : 0과 양수만 허용

  • ZEROFILE : 숫자의 자리수가 고정된 경우 빈자리에 0을 넣음

  • DEFAULT now() : 날짜 컬럼의 기본값을 현재 시간으로


 🍂 연습 문제 (1) 

  • 아래의 필드명을 담은 memberlist 테이블을 생성하기

  • 필드명
    : membernum(int, 자동증가, 기본키, not null), name(varchar(30), not null),
    birth(date, not null), bpoint(int), joindate(date), age(int), gender(varchar(3))

  • 테이블 comment : 회원 목록

  • 기본 문자set : utf-8mb4

  • 워크벤치에서 테이블 생성하는 명령 복사하는 것 권장


 🌱 Workbench를 이용한 table 수정 

  • schema창에서 오른클릭 → Refesh All 클릭 → 이클립스 실행 반영

  • 수정할 테이블이름을 오른클릭 → alter table 선택 → 수정하고 apply 클릭하면 명령문 이나옴

  • 복사해서 이클립스에서 실행

  • set 아니고 change column


 🍂 연습 문제 (2) 

  1. 테이블 생성

    • 테이블 이름 : rentlist

    • 필드
      : rentdate(datetime, default now()), numseq(int, AI), booknum(int)
        membernum(int), discount(int)


 🍂 Workbench를 이용해 외래키 만들기 

  • 외래키1 : rentlist의 booknum은 booklist의 booknum을 참조
    외래키2 : rentlist의 membernum은 memberlist의 membernum을 참조

  • 워크벤치의 alter table창에서 아래쪽 탭에 foreign key탭을 클릭하고 열린창에서 설정을 선택하고 apply하면 됨

  • MySQL에서는 On update CASCADE, On Delete CASCADE 둘 다 설정할 수 있다, 또 외래키에 자동으로 인덱스를 부여한다.

  • apply버튼 클릭 하고 이클립스 가지 않고 명령문을 확인하고 워크벤치에서 실행해도 됨



 🌱 MySQL 내장 함수 

 🍂 숫자 관련 함수 

  • abs(숫자) : 절대값 계산

  • ceiling(숫자) : 값보다 큰 정수 중 가장 작은 수

  • floor(숫자) : 값보다 작은 정수 중 가장 큰 수
                    [실수를 무조건 버림(음수일 경우는 제외)]

  • round(숫자, 자리수) : 소수점 자리수만큼 남기고 아래서 반올림

  • truncate(숫자, 자리수) : round와 같은 동작이지만 반올림 아니고 버림

  • pow(x, y) : x의 y자승

  • mod(x, y) : x를 y로 나눈 나머지 계산

  • greatest(x,y,z...) : 주어진 숫자 중에서 가장 큰 숫자

  • least(x,y,z...) : 주어진 숫자 중에서 가장 작은 숫자


 🍂 문자 관련 함수 

  • ascii(문자) : 해당 문자의 아스키 코드값

  • concat(문자열1, 문자열2, 문자열3...) : 주어진 문자열들 이어붙이기 연산

  • insert(문자열, 시작위치, 길이, 바꿀 문자열) : 문자열의 시작위치부터 길이만큼 바꿀 문자열로 대치

  • replace(문자열, 기본문자열, 바꿀 문자열) : 문자열 안에 있는 기본문자열을 바꿀 문자열로 대치

  • INSTR('문자열', '찾는 문자열) : 문자열 중 찾는문자열의 위치값을 출력

  • LEFT('문자열', 개수) : 문자열 중 왼쪽에서 개수만큼을 추출

  • RIGHT('문자열', 개수) : 문자열 중 오른쪽에서 개수만큼을 추출

  • MID('문자열', 시작위치, 개수) : 문자열 중 시작위치부터 개수만큼 출력

  • SUBSTRING('문자열', 시작위치, 개수) : 문자열 중 시작위치부터 개수만큼 출력

  • LTRIM('문자열') : 문자열 중 왼쪽의 공백을 없앤다.

  • RTRIM('문자열') : 문자열 중 왼쪽의 공백을 없앤다.

  • TRIM('문자열') : 양쪽 모두의 공백을 없앤다.

  • LCASE('문자열') or LOWER('문자열') : 소문자로 바꾼다.

  • UCASE('문자열') or UPPER('문자열') : 대문자로 바꾼다.

  • REVERSE('문자열') : 문자열을 반대로 나열한다.


 🍂 그룹 및 집계 함수 

  • COUNT(필드명) : NULL 값이 아닌 레코드의 수를 구한다.

  • SUM(필드명) : 필드명의 합계를 구한다.

  • AVG(필드명) : 각각의 그룹안에서 필드명의 평균값을 구한다.

  • MAX(필드명) : 최대값을 구한다

  • MIN(필드명) : 최소값을 구한다


 🍂 날짜 관련 함수 

  • now() : 현재 날짜와 시간(datetime형식)

  • curdate() or current_date() : 현재 날짜(date형식)

  • curtime() or current_time() : 현재 시간(time형식)

  • DATE_ADD(날짜, INTERVAL 기준값 더할숫자) : 날짜에서 기준값만큼 더한다
    ※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

  • DATE_SUB(날짜, INTERVAL 기준값 뺄숫자) : 날짜에서 기준값만큼 뺀다.
    ※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND

  • YEAR(날짜) : 날짜의 연도 출력

  • MONTH(날짜) : 날짜의 월 출력

  • MONTHNAME(날짜) : 날짜의 월을 영어로 출력

  • DAYNAME(날짜) : 날짜의 요일을 영어로 출력

  • DAYOFMONTH(날짜) : 날짜의 월별 일자 출력

  • DAYOFWEEK(날짜) : 날짜의 주별 일자 출력
    (일요일(1), 월요일(2), ... 토요일(7))

  • WEEKDAY(날짜) : 날짜의 주별 일차 출력(월요일(0), 화요일(1), ... 일요일(6))

  • DAYOFYEAR(날짜) : 일년을 기준으로 한 날짜까지의 날 수

  • WEEK(날짜) : 일년 중 몇 번째 주

  • FROM_DAYS(날 수) : 00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력

  • TO_DAYS(날짜) : 00년 00월 00일부터 날짜까지의 일자 수 출력

  • DATE_FORMAT(날짜,'형식') : 날짜를 형식에 맞게 출력

    • MySQL의 to_char() : 날짜 -> 지정형식으로
      date_format(now(), '%Y%m%d')
      예) select date_format(now(), '%Y%m%d') from dual;
      ➡️ 필드명:date_format(now(), '%Y%m%d') 값:20221123

    • MySQL의 to_date() : 문자 -> 날짜
      str_to_date('20211013', '%Y%m%d')
      예) select str_to_date('20211013', '%Y%m%d') from dual;
      ➡️ 필드명:str_to_date('20211013', '%Y%m%d') 값:2021-10-13


  format  설명 및 예시
%a요일 (Sun ~ Sat)
%b월 (Jan ~ Dec)
%c월 (0 ~ 12)
%D일 (1st, 2nd, 3rd, ...)
%d일 (01 ~ 31)
%e일 (0 ~ 31)
%fMicrosecond (000000 ~ 999999)
%H시간 (00 ~ 23)
%h시간 (00 ~ 12)
%I시간 (00 ~ 12)
%i분 (00 ~ 59)
%jDay of the year (001 to 366)
%k시간 (00 ~ 23)
%l시간 (1 ~ 12)
%M월 (January ~ December)
%m월 (00 ~ 12)
%pAM or PM
%r  시간(12시)을 hh:mm:ss AM/PM 형식으로  
%S초 (00 ~ 59)
%s초 (00 ~ 59)
%T시간(24시)을 hh:mm:ss 형식으로
  • 표안의 format말고도 더 있음 %u, %y 등등
    참고 링크 : https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html

  • LIMIT
    : select로 데이터 조회 할 때 조회할 레코드의 개수를 조절 제한 할 수 있다.
    select*from scott.memberlist order by membernum desc limit 5;
    회원 정보 조회하여 5개의 레코드만 리턴 (10번부터 6번까지 출력됨, desc:내림차순)

  • OFFSET
    : select로 데이터 조회할 때, 맨 위에서 부터 offset에 지정한 번째 까지는 뛰어넘고 그다음 부터 리턴
    select*from scott.memberlist order by membernum desc limit 3 offset 5;
    5번째 데이터부터 3개의 레코드 리턴 - 개수가 부족하면 있는 곳까지 리턴
    (5번부터 3번까지 출력 됨)


 🍂 commend 창에서 mysql 접속 

  • mysql> -h localhost -u root -p
    : -h는 호스트, -u는 사용자, -p는 비밀번호
    ( 엔터 후 패스워드 입력 )

  • 종료는 quit 또는 exit

  • Schema 생성
    create schema scott default chracter set utf8mb4;

  • 사용하려는 스키마로 이동
    use scott;

  • 현재 스키마의 케이블들 보기
    show tables;

  • 테이블의 구조 보기
    desc 테이블 이름;

  • Workbench가 워낙 접근성이 좋고 편리해서 쓸일은 별로 없을듯




 🐬 MySQL - JDBC 

  • 오라클을 연결한 JDBC와 거의 비슷하다
  • 몇몇 작은 부분이 (함수명과 사용법, 자료형 이름 등) 다르므로 그부분은 주의 하기
  • JDBC를 연습하는 시간이었음

 🌱 Setting 

 🍂 DBmanager 


 🍂 MemberMain - main() 


 🍂 MemberDto 

  • 날짜 형도 String으로 통일

 🍂 MemberDao - 싱글턴 만들기, 전역 변수 설정 



 🌱 Select 

 🍂 MemberMain - select() 

  • 에러코드
    java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
    javapath에 driver 파일을 넣어주지 않아서 생긴 오류
    프로젝트폴더를 오른클릭해서 프로퍼티스 → java build path (→ 라이브러리, class path)에 다운 받았던 jar 파일 넣어주기

 🍂 MemberDao - selectAll() 

  • MySQl이나 Oracle이나 sql문이 거의 비슷하나 날짜와 문자 변환함수처럼 조금씩 다른 부분이 있다.



 🌱 Insert 

 🍂 MemberMain - insert() 


 🍂 MemberDao - insert(MemberDto mdto) 

  • MySQL의 to_date() : 문자 -> 날짜
    str_to_date('20211013', '%Y%m%d')

  • String으로 sql문을 작성해서 넘길 때 함수 안에 ?가 들어가면 문자인지 아닌지 구분을 못함
    (확실하게 문자열로 인식하도록 해야 함)

    • concat('',?,'')을 이용한다. (오라클에서는 ||를 사용)
      -> concat() : 문자열 이어붙이기 함수
      -> '' : 작은따옴표 두개, 큰따옴표 아님



 🌱 Update 

 🍂 MemberMain - update() 

  • 수정하고자 하는 항목의 데이터를 입력받아서 레코드를 수정

  • 첫번째로 수정하고자 하는 회원의 회원번호를 입력받고,
    입력받은 회원번호로 조회해서 해당 회원이 존재하는지 확인

  • 조회 메서드 이름은 getMemeber
    없으면 없다고 출력하고 메서드를 종료
    해당 회원이 있으면 그 회원의 정보를 mdto객체에 저장

  • 수정데이터입력은 항복 하나씩 물어보고 입력받되,
    수정이 필요없는 항복은 엔터만 쳐서 다음으로 넘어가기

  • 수정 데이터 입력을 받기전에 기존 데이터 내용을 출력하여 안내하고 수정할 내용을 입력받기

  • 레코드 수정 메서드 이름은 update


 🍂 MemberDao - getMemeber(int membernum) 


 🍂 MemberDao - update(MemberDto mdto) 



 🌱 Delete 

 🍂 MemberMain - delete() 


 🍂 MemberDao - delete(int membernum) 




profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글