cookie / session / DB연동 - Mysql

2022. 10. 7. 17:01Dev.Program/JSP & Javascript

728x90

지난시간 session/cookie 복습

> cookieDel.jsp 추가사항

쿠키값이 없는 경우에는 삭제할 필요가 없으니까 for문 돌리기 전에 if문으로 null값인지 아닌지 알아봄.

if(cookies!=null) { for문 }

⇒ null이 아닌 경우에만 for문이 돌아가도록.



======== cookieMain.jsp / cookiePro.jsp 문서 2개 새로 만들기

책 p. 290

cookieMain.jsp - 책에서 example1.jsp

cookiePro.jsp - 책에서 example2.jsp



언어가 한국어 설정이면 한국어만 보이게. 영어 설정이면 영어만 보이게.

⇒ 이런식으로 만들어 볼 예정

 

문제)

// lang 파라미터 값 가져오기

// 쿠키값 만들어주기 "clang", 위에 만든 lang 변수 값을 쿠키 값으로 설정

// 쿠키 시간 설정

// 클라이언트에 저장

 

// 쿠키값 생성 메세지

// 이동 cookieMain.jsp

 

풀어보기.










풀이 )

Cookie cookie = new Cookie("clang", lang);

   new 선언 => cookie를 담을 기억장소 만들기



문제)

String language = "korea";

  • 변수 설정 먼저(korea 값은 넣든 말든 상관없음. 어차피 쿠키값 저장시킬거라...)

// request에 쿠키값 가져오기

// 쿠키값 있으면(if)

// for문으로 쿠키값 뽑아오기

// if 뽑아온 쿠키이름 "clang" 비교

// 일치하면 language 변수에 쿠키값 저장

 

푼 답)

일단 바뀌긴 바뀌네…..ㅎ

 

⇒ 이렇게 풀어도 되고! 선생님처럼 <% %> 밖에 <h3>Hello~</h3>로 따로 빼줘도 되고!

(아래쪽에 선생님 풀이 코드 넣어놓음)




> Cookie[] cookies = request.getCookies();

원래 쿠키는 다 따로 떨어져서 돌아다니는데, 배열을 선언해주면서

 

a 쿠키(i=0번째) b 쿠키(i=1번째) c 쿠키(i=2번째)         ……. n 쿠키(i=n번째)

이런 식으로 쿠키들이 배열 정리 되는것.

(그래서 for 문을 돌려서 내가 찾는 쿠키가 몇 번째에 담겨있는지 알아보고 뽑아오는것)



선생님 코드. (아래쪽 if 문 보면 <h3></h3>는 <%%> 코드 바깥으로 따로 빼줌)

 

근데 실행화면을 잘 보면 영어로 설정되서 나오는데 라디오박스에는 체크가 안 되어있다!

 

> cookieMain.jsp

그래서 문제)

한국어가 설정되어 있으면 라디오 박스에 한국어 체크 되고,

영어가 설정되어 있으면 라디오 박스에 영어 체크 되도록 제어. (if문 사용)

 

> cookieMain.jsp

풀이) checked는 <% %> 안에 들어가면 안되기때문에 바깥으로.




→ 쿠키는 여기서 끝입니다….. 뒤에는 쿠키 안나옴. 뒤에는 이제 세션값만 나올거….




========  jsp1 파일에 testForm3.jsp / testPro3.jsp 문서 2개 새로 만들기

js2 파일의 test9.html 에서 바디부분 긁어와서 testForm3.jsp에 적기.

js2 파일의 a.jsp 에서 바디부분 긁어와서 testPro3.jsp에 적기.

취미선택은 다중선택이 가능하므로

<%=request.getParameter("hob")%> 이렇게만 가져오면 첫번째 값만 가져옴. 

(여러개의 값을 가져오지 못함)




< testPro3.jsp >

변수를 설정해주는데, Values! 여러개기 때문에 이렇게 오류가 뜸.

배열변수로 설정해주면 여러개의 값도 가능하기 때문에 오류가 없어진다.

 

문제)

밑에 request도 여러개의 값을 가져오게끔 for문으로 작성.

푼 답)

(줄줄이 나오니까 뒤에 띄어쓰기 붙여주는 센스!)

vvvvvvvvvvvvvvvvvvvvv




>> 취미를 선택하지 않고 넘기면

  • 이렇게 500 오류뜸!

 

⇒ null 인데 for문의 hob.length 만큼 돌리라니까 에러가 나는거.

그래서 if 문을 통해 null이 아닐 경우에만 for문을 돌리게끔 제어해준다.





> 배열을 가지고 테이블에 출력하는 것을 해보자

푼 답)

 

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

저번에 했던 jsp 테스트(과제) 선생님이 코멘트 달아서 남겨놓음.

우편번호를 윈도우창으로 새로 열어야했다...ㅎㅎ

 

 

> cookie 복습

> 배열을 가지고 테이블에 출력하는 것을 해보자.

풀이 )

<table border="1">

<tr><td>번호</td><td>취미</td></tr>

<%for(int i = 0; i < hob.length; i++) { %>

<tr>

<td><%=i+1 %></td>

<td><%=hob[i] %></td>

</tr>

<%}%>

⇒ 이렇게도 가능(선생님답안)



< DB 연동 - MySQL>

시작 - 오른쪽버튼 - 실행 - cmd

mysql -u root -p

1234

데이터베이스 목록

show databases;

데이터베이스 선택

use world;

테이블 목록

show tables;

테이블 안에 데이터 조회

select * from country;

 

# 쇼핑몰 프로젝트

  1. 전체 프로젝트 데이터를 저장할 공간 만들기 - 데이터베이스(이론적으론 스키마) 만들기
  2. 데이터 베이스를 관리할 사용자 만들고, 역할 부여(권한 부여)
  3. 주제별로 저장할 공간 만들기 - 테이블 만들기(회원, 게시판, 상품 등등...)

 

시작 - 오른쪽버튼 - 실행 - cmd

  • 윈도우 상태

  • mysql -u root -p
  • 1234
  • 데이터 베이스 서버(mysql)로 들어간 상태
  • 모든 권한을 다 가지고 있음.

|information_schema -시스템관련

| mysql   -시스템관련

| performance_schema -시스템관련

| sakila   -예제 관련

| sys  -시스템관련

| world -예제 관련

 

  • create database jspdb1;  

⇒ 데이터 베이스 만들기: *DB에서 사용하는 언어 중 SQL 구문

  • jspdb1 만들어진 걸 확인할 수 있음.

 

< * SQL언어 구문 >

정의어 - 공간만들기(create), 수정(alter), 삭제(drop)

제어어 - 권한 부여 : 일을 할수 있게끔(grant), 권한 해제(revoke)

★ 조작어(실제로 프로그램에서 가장 많이 사용)

- 공간안에 내용 ★ 저장(insert), 수정(update), 삭제(delete), 조회(select) ★

 

  • use jspdb1; 데이터 베이스 선택
  • 이 많은 목록 중에 나는 jspdb1 을 사용하겠다는 뜻

  • show tables; 지금은 테이블이 비어있는 상태.



> create table 테이블 만들기

> 학생 테이블을 만들건데, 학생의 번호 이름 등등을 만들어야함.

> 우리는 일단 번호, 이름만 만들어보자.

  • create table student(

num int,

name varchar(20)

);

  • // DB에서 java 의 String 타입은 varchar !

 

  • show tables;
  • 우리가 만든 student 테이블 생김.

 

  • desc student;
  • student table 구조확인.
  • 필드라고 해서 테이블 형태로 생김.

 

  • select * from student; => student 테이블 안에 모든 내용 확인
  • 테이블 안에 있는 내용 확인 (아직은 비어있음.)

  • insert into student(num, name)

values(1, '홍길동'); // 우리는 아직 한글 설정을 안해서 error 가 뜸vvv.

  • ERROR 1366 (HY000): Incorrect string value: '\xC8\xAB\xB1\xE6\xB5\xBF' for column 'name' at row 1
  • 테이블 안에 데이터 저장하기(입력하기)

 

< 기본 문법 >

insert into 테이블이름(열이름1, 열이름2)

values(값1, ‘값2’);   //문자열은 작은따옴표(‘’) 안에 넣어주기

 

  • 영문으로 하니까 잘 들어감(한글설정은 나중에 할 거)

 

  • select * from student;
  • 넣고 다시 확인하면 잘 들어가있다.

 

  • insert into student(num, name)

values(1, 'honggil');

  • 다시 1, 홍길동 넣어봄.

  • select * from student;
  • 값이 동일하게 두 번 들어감.
  • 기준키를 만들어줘야됨. name은 중복값이 있을 수 있으니까 num을 기준으로!
  • 기준키(primary key) 설정.

 

  • status => DB의 현재 상황을 볼 수 있다.
  • Current database:       jspdb1
  • Current user:               root@localhost         ⇒ localhost로 root에 로그인 했다.
  • Server characterset:    latin1

Db     characterset:      latin1

⇒ 라틴어로 설정되어있어서 한글 안나옴.(UTF-8로 설정 바꿔줘야 함)

 

  • ProgramData 안보이면 보기-숨김항목 체크
  • C:\ProgramData\MySQL\MySQL Server 5.7    ⇒ my.ini
  • 바로 수정이 안되기 때문에 복사해서 바탕화면으로 가져감(수정 후 덮어쓰기 할 예정)
  • 에디터로 열어줌(Notepad++)

  • 에디터로 열어줌(Notepad++)

  • #은 주석 : 지워줄거임

  • character-set-server=UTF8
  • UTF-8 에서 -는 빼고 적기

  • 다시 파일 옮기기 => 파일 덮어쓰기
  • cmd 창 닫아주고 db 재시작 해주기

 

  • 돌고래 모양 Restart

 

  • mysql -u root -p

1234

  • status
  • utf8로 바뀐 것을 확인할 수 있다.

  • show databases;
  • 그 전에 만들어둔 게 나옴.

  • use jspdb1
  • status
  • 이전에 만들어 둔 건 언어가 안바뀜. 지우고 다시 만들기.

  • drop tables student;
  • 테이블 삭제
  • show tables;
  • 삭제 확인

  • drop database jspdb1;
  • 데이터 베이스 삭제
  • show databases;
  • 조회하면 삭제된 거 확인 가능

  • create database jspdb1;
  • use jspdb1 // jspdb1 선택

  • status
  • 한글 설정 잘 됨. (확인)

  • create table student(

num int primary key,

name varchar(20)

);

  • num 으로 기준키(primary key)를 잡아줌. (name은 중복 가능하기 때문)
  • show tables;
  • 학생 테이블이 잘 만들어짐.

  • desc student;
  • num이 primary key 로 설정됨.

  • insert into student(num, name)

values(1, '홍길동');

 

  • select * from student;
  • 한글 설정 해주니까 이제 한글도 잘 들어감!

  • insert into student(num, name)

values(1, '홍길동');

  • 이제 primary key를 설정했기 때문에 중복값은 안들어가짐.
  • ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

  • primary key(여기선 num)는 중복 되어도 ERROR, 안적어도 ERROR

  • insert into student(num

values(3);

  • 이름 빼고 num 값 만은 넣을 수 있다. 위에도 num 만 적어주기. 이름에는 NULL 값이 나옴.
  • insert into student(name)

values('홍');

  • ERROR 1364 (HY000): Field 'num' doesn't have a default value
  • 이렇게 이름만 넣는 건 안됨 (num 이 primary key 이기 때문에 무조건 적어줘야 됨.)

  • 5번 까지 차례대로 넣어 주기.

< 기본 문법 : 조건 >

select 열이름, 열이름 from 테이블이름

where 조건열=값;

 

  • select * from student; 
  • * 은 전체열 뽑기
  • select name from student;
  • 원하는 열만 적으면 그 열만 뽑아서 볼 수 있다.

  • select * from student

where num=2;

  • where로 조건을 걸어서 num 번호가 2번인 사람만 가져올 수 있다.

 

문제 ) 이름이 유관순인 사람 가져오기

  • select * from student

where name=’유관순’;

  • 풀이






문제) 번호가 1번이면서 동시에 name이 홍길동 인 사람(and 연산자 사용)

  • select * from student

where num=1 && name=’홍길동’;

  • 풀이 

 

< 기본 문법 : 정렬 >

select 열이름, 열이름 from 테이블 이름

order by 기준열 desc/asc;

 

정렬은 아무것도 안적을 경우 기준키(primary key)를 기준으로 오름차순 정렬 -default



문제) num을 기준으로 내림차순 정렬

  • select * from student

order by num desc;

  • 풀이













문제) name을 기준으로 오름차순 정렬

  • select * from student

order by name [asc];

  • 풀이. [asc] 는 생략가능

 

문제) name을 기준으로 내림차순, num 오름차순

  • select * from student

order by name desc, num [asc];

  • 풀이. [asc] 는 생략가능

















< 기본 문법 : 데이터 수정 >

update 테이블이름 set 수정할 열이름 = 값, 수정할 열이름 = 값

where 조건열 = 값;

 

  • update student set name = '김길동'

where num = 3;

  • 3번 데이터를 김길동으로 수정

 

문제) 5번 학생을 학번은 7로, 이름은 ‘유길동’ 변경

  • update student set num = 7, name = '유길동'

where num = 5;

  • 풀이 (where를 안붙이면 모든 데이터가 다 바뀜)







< 기본 문법 : 데이터 삭제 >

delete from 테이블이름

where 조건열 = 값;

 

  • delete from student

where num = 7;

  • 7번 삭제

 

문제) 이름이 이순신 삭제

  • delete from student

where name = ‘이순신’;

  • 풀이



insert update delete => 결과값 없음 (컴퓨터에서는 같은 묶음으로 취급)

  • Query OK, 1 row affected~~~~

select ⇒ 결과값 있음

  • 결과값 출력

 

(책 428p) JSP => DB 연동

  • 그냥 연동 안됨. java와 DB를 연결해주는 프로그램 필요. => JDBC 프로그램
  • mysql-connector-java-5.1.47.jar => 우리가 쓸 JDBC 파일

- 여기 안에 전부 설치! (복사해서 넣어주면 알아서 설치됨)

StudyJSP - WebContent - WEB-INF - lib

mysql-connector-java-5.1.47.jar 복사해서 넣기.

 

< JSP - DB 연동 >

1단계 ) JDBC 프로그램 설치 - 설치한 JDBC 안에 있는 드라이버 불러오기

2단계 ) 불러온 드라이버를 이용해서 DB 주소, DB 아이디, DB 비밀번호를 가지고 DB에 접속

⇒ 접속했을 때 연결이 유지가 되어야 하기 때문에 접속 정보를 저장.

3단계 ) 연결정보를 이용해서 SQL 구문을 만들고 실행할 수 있는 객체 생성

⇒ 실행할 수 있는 java 파일이 있음.

4단계 ) 객체 실행

 ⇒ SQL 구문이 실행되어짐. (눈에는 안보이지만 내부적으로 동작이 되어짐)

 ⇒ insert, update, delete (4단계로 마무리)

 

 ⇒ select 는 결과값이 있기 때문에 5단계(결과 저장) 과정으로 넘어감.

 5단계 ) 결과를 처리하는 작업 (출력, 배열저장)

  ⇒ select

마무리 단계 ) 객체생성 기억장소 해제

WebContent - jsp3 폴더 새로 만들기.

jsp3 - jdbcTest.jsp 파일 새로 만들기.

  • class를 관리하는 파일.
  • forName이라는 기능이 있다.
  • Class.forName(className);

⇒ className은 위치까지 다 알려줘야됨.

  • com 폴더 속 mysql 폴더 속 jdbc 폴더 속에 Driver.class 가 있음.

com.mysql.jdbc.Driver => 폴더 속 구분은 . 으로 구분함!

.class는 없어도 됨. 우리는 class를 불러오는거기 때문에 확장자는 적어줄 필요 없다.

 

  • DriverM + ctrl + space => DriverManager 엔터!
  • <%@page import="java.sql.DriverManager"%>
  • 맨 위에 나타남.
  • java 폴더 안에 sql 폴더 안에 DriverManager 라는 게 들어가 있는걸 알려주는 표시.
  • 우리는 java.sql 폴더 안에 있는 것만 쓸거.
  • DriverManager : Driver를 관리하는 역할
  • DriverManager.getConnection(디비주소, 디비아이디, 디비비밀번호);

 

  • 우리는 디비주소가 다 길어서 String 변수에 따로 담아줄 거.
  • String dburl = "jdbc:mysql://localhost:3306/jspdb1"; 
  • ⇒ 3306 통로만 사용, 우리가 만든 jspdb1
  • String dbuser = "root";
  • String dbpass = "1234";
  • DriverManager.getConnection(dburl, dbuser, dbpass);

  • 접속 정보를 저장하는 변수에 담아줘야 함.

  • Connection 도 java.sql 선택!
  • <%@page import="java.sql.Connection"%>
  • 맨 위에 나타남.
  • Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);



  • 실행화면
  • 최종 코드
  • <%

Class.forName("com.mysql.jdbc.Driver");

 

String dburl = "jdbc:mysql://localhost:3306/jspdb1"; // 우리가 만든 DB

String dbuser = "root"; // 우리가 쓰는 DB 아이디

String dbpass = "1234"; // 비밀번호

Connection con = DriverManager.getConnection(dburl, dbuser, dbpass);

%>

<%="연결성공" %>

 

- ㅎㅎㅎㅎㅎ

insertForm.jspinsertPro.jsp 파일 새로 만들기

  • <form action="insertPro.jsp" method="get">

학번 : <input type="text" name="num"> <br>

이름 : <input type="text" name="name"> <br>

<input type="submit" value="학생등록">

</form>

  • request 파라미터 가져와서 변수에 저장

  • int num = request.getParameter("num")    ⇒ 이렇게 적으면 오류남!
  • 형변환 꼭 해주기!!!!! 어쩐지 계속 오류 나더라 ㅎ.ㅎ
  • <%

int num = Integer.parseInt(request.getParameter("num"));

String name = request.getParameter("name");

%>

 

학번 : <%=num %><br>

이름 : <%=name %><br>

 

728x90

'Dev.Program > JSP & Javascript' 카테고리의 다른 글

게시판(board)  (0) 2022.10.07
JSP - DB 연동  (0) 2022.10.07
내장객체  (0) 2022.10.07
내장함수 / 객체지향  (0) 2022.10.07
태그 / 주석 / function 함수  (0) 2022.10.07