2022. 10. 7. 17:06ㆍDev.Program/JSP & Javascript
지난시간 복습
< * SQL언어 구문 >
정의어 - 공간만들기(create), 수정(alter), 삭제(drop)
제어어 - 권한 부여 : 일을 할수 있게끔(grant), 권한 해제(revoke)
★ 조작어(실제로 프로그램에서 가장 많이 사용)
- 공간안에 내용 ★ 저장(insert), 수정(update), 삭제(delete), 조회(select) ★
< insert 기본 문법 : 데이터 저장 >
insert into 테이블이름(열이름1, 열이름2)
values(값1, ‘값2’); //문자열은 작은따옴표(‘’) 안에 넣어주기
< where 기본 문법 : 조건 >
select 열이름, 열이름 from 테이블이름
where 조건열=값;
< order by 기본 문법 : 정렬 >
select 열이름, 열이름 from 테이블 이름
order by 기준열 desc/asc;
< update 기본 문법 : 데이터 수정 >
update 테이블이름 set 수정할 열이름 = 값, 수정할 열이름 = 값
where 조건열 = 값;
< delete 기본 문법 : 데이터 삭제 >
delete from 테이블이름
where 조건열 = 값;
< JSP - DB 연동 >
1단계 ) JDBC 프로그램 설치 - 설치한 JDBC 안에 있는 드라이버 불러오기
2단계 ) 불러온 드라이버를 이용해서 DB 주소, DB 아이디, DB 비밀번호를 가지고 DB에 접속
⇒ 접속했을 때 연결이 유지가 되어야 하기 때문에 접속 정보를 저장.
3단계 ) 연결정보를 이용해서 SQL 구문을 만들고 실행할 수 있는 객체 생성
⇒ 실행할 수 있는 java 파일이 있음.
4단계 ) 객체 실행
⇒ SQL 구문이 실행되어짐. (눈에는 안보이지만 내부적으로 동작이 되어짐)
⇒ insert, update, delete (4단계로 마무리)
⇒ select 는 결과값이 있기 때문에 5단계(결과 저장) 과정으로 넘어감.
5단계 ) 결과를 처리하는 작업 (출력, 배열저장)
⇒ select
마무리 단계 ) 객체생성 기억장소 해제
- 지난시간에 한 설치
insertPro.jsp 파일 안
???
String sql=”sql구문”;
-------------------번호랑 이름 입력하라는 게 아니랗ㅎㅎㅎ
입력한 번호랑 이름 값이 나오도록ㅋㅋ
// String sql = "insert into student(num, name) values(num, 'name')";
String sql="insert into student(num, name) values(" + num + ",'" + name + "')";
→ 작은 따옴표도 묶어주기! String 타입이기 때문.
PreparedStatement pstmt = con.prepareStatement(sql);
⇒ 사실 이렇게 하는건 보안상 좋지 않음.
큰 따옴표 작은 따옴표가 섞여 있기 때문에 해커가 침입하기 딱 좋다...ㅎㅎ
pstmt.executeUpdate();
4단계 ) sql 구문을 만들고 실행하는 단계
- 값이 잘 들어가는 것을 확인할 수 있다! (이미 값이 있는 번호를 넣으면 오류 뜸)
- sql 구문이 이런식으로 동작했음을 알수 있다.
String sql="insert into student(num, name) values(" + num + ",'" + name + "')";
→ 작은 따옴표도 묶어주기! String 타입이기 때문.
⇒ 사실 이렇게 하는건 보안상 좋지 않음.
큰 따옴표 작은 따옴표가 섞여 있기 때문에 해커가 침입하기 딱 좋다...ㅎㅎ
다른방법으로 합니다.
String sql="insert into student(num, name) values(?,?)";
pstmt.setInt(1, num);
pstmt.setString(2, name);
물음표 자리에 값을 넣어주는거! (가장 많이 쓰임)
pstmt.setInt(parameterIndex, x)
Int : 넣어줄 값의 데이터타입
parameterIndex : 물음표 순서(1번부터 시작)
x : 값
updateForm.jsp / updatePro.jsp 새 문서 만들기
문제 ) 이름 수정하는 문서로 만들기
내가 푼 답 ) updateForm.jsp
내가 푼 답 ) updatePro.jsp
내가 푼 답 ) 학생수정 성공!
업데이트 구문이 이렇게 들어가는 것을 확인할 수 있다.
deleteForm.jsp / deletePro.jsp 새 문서 만들기
문제 ) 학번과 이름이 일치할 경우에만 삭제 (delete 만들기)
내가 푼 답 ) deleteForm.jsp 화면
내가 푼 답 ) deletePro.jsp
처음에 계속 오류가 났는데 and를 안적어줘서 계속 오류가 났던거!!!!!
둘 다 일치할 때만 넘기기 때문에 and를 적어줘야한다.
String sql = "delete from student where num = ? and name = ?";
삭제된 화면(cmd창)과 delete 구문이 잘 입력된 것을 확인할 수 있다.
select.jsp 새문서 만들기
디비에서 내용을 받아와서 여기에 값이 들어가도록!
4단계 ) ResultSet rs = pstmt.executeQuery();
select 문은 4단계부터 다름!! (결과를 저장)
ResultSet 은 커서가 제일 꼭대기(위)에 저장(?) 되어 있음(처음 rs에는 데이터 없음)
next() 다음행 preview() 이전행 first() 첫번째행 last() 마지막행 : 행의 위치 이동
→ next 를 제일 많이 씀! 데이터가 있으면 true 값을 리턴해줌.
(열 번호는 1번부터 시작됨)
반복문을 통해서 값을 뽑아내는데 true 값이 나오면 다음으로 계속 넘어가도록 만들거!
for문 ? while 문? - while 문!! 끝이 어딘지 모르기 때문에!
- while 문으로 실행 -> 반복문 만들기
- 첫번째 열, 두번째 열을 뽑아와야됨! => get 함수 씀.
- rs.getInt(columnIndex) => columnIndex 에 열 번호 적기
- rs.getInt(1); // rs.getInt("num"); 둘 다 가능하지만 일반적으로 rs.getInt("num"); 씀
- num(열이름)을 적어야 모르는 사람이 봐도 직관적으로 확인 가능하기 때문
- 데이터를 표 안에 넣어주기
- 데이터 값이 잘 들어옴!
selectForm.jsp /selectPro.jsp 새 문서 만들기
- 입력한 번호값만 들고오게끔 제어
- 풀이 ) selectForm.jsp
풀이 ) selectPro.jsp => 이 부분이 어려웠다ㅜㅜㅜㅜㅜ 수영이 도움받음
select.jsp --- 파일
풀이 ) if문을 사용하는것도 가능
if (rs.next()) {
%><tr><td><%=rs.getInt("num") %></td><td><%=rs.getString("name") %></td></tr><%
}
rs.next()에 값이 있으면 계속 true를 출력. 이렇게도 가능하다!
쇼핑몰 프로젝트
1. 전체 프로젝트 데이터를 저장할 공간 만들기 - 데이터베이스 만들기
⇒ jspdb1
2. 데이터베이스를 관리할 사용자 만들고 역할 부여(권한부여)
⇒ root(모든 권한을 가지고 있음}) => 디비 관리할 사용자아이디 : jspid
=> 디비 비밀번호 jsppass
⇒ jspdb1을 관리할 권한 부여 create, alter, drop, insert, update, delete, select..
grant select,insert,update,delete,create,drop,alter
on jspdb1.* to 'jspid'@'localhost'
identified by 'jsppass';
grant select,insert,update,delete,create,drop,alter
on jspdb1.* to 'jspid'@'%'
identified by 'jsppass';
grant ⇒ 권한 부여
1 warnig 은 아이디랑 비번 설정 안해놔서 뜨는거 ㅎㅎ
on jspdb1.* to 'jspid'@'localhost'
- 로컬호스트로 접속했을 때 권한부여
on jspdb1.* to 'jspid'@'%'
- jspid로 접속했을 때 권한부여
cmd창 새로 열어서 다시 jspid로 로그인하기 (비번jsppass)
3. 주제별로 저장할 공간 만들기 - 테이블 만들기(회원,게시판,상품,..)
⇒ student ⇒ 회원테이블(member) : 아이디(-primary key) 비밀번호 이름 가입날짜 …
use jspdb1 // jspdb1 에 만들어줄거기때문에
create table member(
id varchar(20) primary key,
pass varchar(20),
name varchar(20),
reg_date datetime
);
register date(가입날짜) -> datetime
show tables; 테이블 만들어진 거 확인 가능
jsp4 폴더 새로 만들기
- insertForm.jsp / insertPro.jsp 문서 새로 만들기
- insertForm.jsp 화면
- 비밀번호 : <input type="password" name="pass"> <br> =>수정
create table member(
id varchar(20) primary key.
pass varchar(20),
name varchar(20),
reg_date datetime
);
<form action="insertPro.jsp" method="get">
아이디 : <input type="text" name="id"> <br>
비밀번호 : <input type="text" name="pass"> <br>
이름 : <input type="text" name="name"> <br>
- 가입날짜는 시스템에 있는거 가져올거임(시스템에 저장되어있기때문에)
<input type="submit" value="회원가입">
</form>
⇒ 만들어준 열이름과 동일하게 설정
문제 ) 이제 insertPro.jsp에 정보 가져오기
Timestamp reg_date = new Timestamp(System.currentTimeMillis());
현재 날짜 가져오기 (데이터베이스에 띄울 땐 setTimestamp)
- insertPro.jsp 화면
vvvvvvvvvvvvvvvvv
- 회원 등록 후
- select * from member;
- 데이터입력이 잘 된것을 확인.
insertPro.jsp 문제 풀이!
회원가입 후에는 로그인을 합니다! 로그인 화면 만들기.
loginForm.jsp /loginPro.jsp 새 문서 만들기
insertPro.jsp 밑에 스크립트로 loginForm.jsp 로 넘어가게끔
- loginForm.jsp 화면
문제) loginPro.jsp 문서에서
id pass 파라미터 가져오기
폼 아이디와 디비 아이디 일치 & 폼 비밀번호와 디비 비밀번호 일치하면
로그인 처리 = 세션값 부여(생성) : 세션값 "id", id 생성 main.jsp 이동
main.jsp / info.jsp 새 문서 만들기
- main.jsp 화면
- 내부적으로 오브젝트형으로 바뀌어져 있음. 그래서 스트링형으로 형변환을 시켜줘야한다.
- String id = (String)session.getAttribute("id");
문제) info.jsp 문서에서
// session 가져와서 변수에 저장
// 1단계 드라이버로더
// 2단계 디비연결
// 3단계 sql 만들고 실행할 수 있는 객체 만들기 select(로그인한 사람만 들고오게끔)
// 4단계 결과 <= 실행결과 저장
// 5단계 rs 내용 위치 첫행이동 데이터 있으면 출력
- if(rs.getString("id") == id) 하면 안됨!! 잘 틀리는거!!
이거때문에 계속 오류 났다….ㅜㅜ
- if(rs.getString("id").equals(id)) 로 적어줘야됨
- 아직 아이디/비밀번호가 일치해야 로그인되었다고 넘어가는 건 안함ㅎㅎ
if(rs.next()){ %> 아이디:<%=rs.getString("id") %><br> 비밀번호:<%=rs.getString("pass") %><br> 이름:<%=rs.getString("name") %><br> 가입날짜:<%=rs.getTimestamp("reg_date") %><br> <% } %> <a href="main.jsp">메인화면</a> |
- 선생님 코드! while문 안쓰고 if 문으로 쓰심.
- 로그인화면
- 메인화면
- 인포화면 : 회원정보 조회
문제 ) loginPro.jsp 문서에서
1단계 드라이버 불러오기
2단계 디비연결
3단계 sql 디비 member 테이블 안에 아이디 일치 한 회원 내용 가져오기
// 폼 아이디와 디비 아이디 일치
4단계 실행 => 결과 저장
5단계 rs 첫행 이동 결과 있으면 아이디 일치 ⇒ 비밀번호 비교
맞으면 세션값 생성 - main.jsp 이동
틀리면 "비밀번호 틀림"
결과가 없으면 "아이디 없음"
폼 아이디와 디비 아이디 일치 & 폼 비밀번호와 디비 비밀번호 일치하면
로그인 처리 = 세션값 부여(생성) : 세션값 "id", id 생성 main.jsp 이동
푼 답 )
<script type="text/javascript"> alert("비밀번호가 틀립니다!"); history.back(); </script> |
선생님 답) <a href=""></a> 대신 history.back(); 뒤로가기 사용
String sql = "select * from member where id = ?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, id); |
⇒ 폼의 아이디와 디비 아이디를 미리 비교함
if(rs.next()) { if(rs.getString("pass").equals(pass)) { session.setAttribute("id", id); response.sendRedirect("main.jsp"); } else { out.println("비밀번호가 틀립니다."); %> <a href="loginForm.jsp">로그인 화면으로 돌아가기</a> <%} } else { out.println("아이디가 틀립니다."); %><a href="loginForm.jsp">로그인 화면으로 돌아가기</a><% }%> |
⇒ 그래서 if 문으로 돌릴 수 있다! (아이디가 있으면 result 값이 있고 아니면 없기 때문)
logout.jsp 새 문서 만들기
문제 ) logout.jsp 문서에서 세션값 초기화(=로그아웃)
답 ) logout.jsp 창에서
선생님 답안 ) 풀이
- 로그아웃 하면 null 님이 로그인하셨습니다. 라고 나옴. (출력창)
- 그럼 이상하니까~~ 로그인 한 사람만 main.jsp 화면을 볼 수 있도록 설정해줄거!
문제 ) main.jsp 문서에서
세션값 null이면(세션값이 없으면)
loginForm.jsp 로 이동
if(id == null) { response.sendRedirect("loginForm.jsp"); } |
updateForm.jsp / updatePro.jsp 새 문서 만들기
<form action="insertPro.jsp" method="post"> 아이디 : <input type="text" name="id"> <br> 비밀번호 : <input type="password" name="pass"> <br> 수정할 이름 : <input type="text" name="name"> <br> <input type="submit" value="회원정보수정"> </form> |
updateForm.jsp 화면. (insertForm.jsp 에서 긁어오기) => 이름만 수정할거
<h1>WebContent/jsp4/updateForm.jsp</h1> <% // 문제 ) // 세션값 가져오기 // 1단계 드라이버로더 // 2단계 디비연결 // 3단계 sql member 테이블에서 id에 해당하는 회원정보 가져오기 // 4단계 rs <= 실행 // 5단계 rs 첫행으로 이동 데이터 있으면(아이디 존재) : if(rs.next()) { %> <form action="updatePro.jsp" method="post"> 아이디 : <input type="text" name="id" value="<%= %>" readonly> <br> // 아이디는 수정할 게 아니라 참고만 할 거라 readonly 비밀번호 : <input type="password" name="pass"> <br> 수정할 이름 : <input type="text" name="name" value="<%= %>"> <br> <input type="submit" value="회원정보수정"> </form> <% } %> |
--------------
<%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.DriverManager"%> <%@page import="java.sql.Connection"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>WebContent/jsp4/updateForm.jsp</h1> <% request.setCharacterEncoding("utf-8"); // 세션값 가져오기 // 1단계 드라이버로더 String id = (String)session.getAttribute("id"); // 2단계 디비연결 Class.forName("com.mysql.jdbc.Driver"); String dburl = "jdbc:mysql://localhost:3306/jspdb1"; String dbuser = "jspid"; String dbpass = "jsppass"; Connection con = DriverManager.getConnection(dburl, dbuser, dbpass); // 3단계 sql member 테이블에서 id에 해당하는 회원정보 가져오기 String sql = "select * from member where id = ?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, id); // 4단계 rs <= 실행 ResultSet rs = pstmt.executeQuery(); // 5단계 rs 첫행으로 이동 데이터 있으면(아이디 존재) if(rs.next()) { %> <form action="updatePro.jsp" method="post"> 아이디 : <input type="text" name="id" value="<%=rs.getString("id") %>" readonly> <br> 비밀번호 : <input type="password" name="pass"> <br> 수정할 이름 : <input type="text" name="name" value="<%=rs.getString("name") %>"> <br> <input type="submit" value="회원정보수정"> </form> <% } %> </body> </html> |
푼 답 ) updateForm.jsp 화면.
<%@page import="java.sql.ResultSet"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.DriverManager"%> <%@page import="java.sql.Connection"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>WebContent/jsp4/updatePro.jsp</h1> <% request.setCharacterEncoding("utf-8"); String id = request.getParameter("id"); String pass = request.getParameter("pass"); String name = request.getParameter("name"); %> 수정할 이름 : <%=name %> <% Class.forName("com.mysql.jdbc.Driver"); String dburl = "jdbc:mysql://localhost:3306/jspdb1"; String dbuser = "jspid"; String dbpass = "jsppass"; Connection con = DriverManager.getConnection(dburl, dbuser, dbpass); String sql = "select * from member where id = ?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, id); ResultSet rs = pstmt.executeQuery(); if(rs.next()) { if(rs.getString("pass").equals(pass)) { sql="update member set name = ? where id = ?"; pstmt = con.prepareStatement(sql); pstmt.setString(1, name); pstmt.setString(2, id); %> <script type="text/javascript"> alert("회원정보수정"); location.href = "main.jsp"; </script> <% pstmt.executeUpdate(); } else { %><script type="text/javascript"> alert("비밀번호가 틀립니다!"); history.back(); </script> <%} } %> </body> </html> |
푼 답 ) updatePro.jsp 화면.
문제 ) delete 도 혼자 해보기…………..
deleteForm.jsp / deletePro.jsp 새 문서 만들기
'Dev.Program > JSP & Javascript' 카테고리의 다른 글
자바빈(JavaBean) (0) | 2022.10.07 |
---|---|
게시판(board) (0) | 2022.10.07 |
cookie / session / DB연동 - Mysql (0) | 2022.10.07 |
내장객체 (0) | 2022.10.07 |
내장함수 / 객체지향 (0) | 2022.10.07 |