본문 바로가기

자바 웹 개발자가 될거야/JSP

[JSP] JSP Mysql 연결 / 드라이버 이름 확인하기 / JSP에서 입력받아 DB로 보내기 / 워크밴치 재설치

< JSP와 MySql 연결 >

 

 

- JSP와 DataBase(MySql) 연결하는데 도와주는 건 드라이버

- JDBC (Java DataBase Connectivity) : 자바랑 데이터베이스랑 연결하는 API

  · DB 종류와 상관없이 독립적으로 사용가능 ( 단, DB에 따른 사용방법은 상이함 )

 

 

 

① 드라이버 설치

 

 

https://www.mysql.com/

 

MySQL

Over 2000 ISVs, OEMs, and VARs rely on MySQL as their products' embedded database to make their applications, hardware and appliances more competitive, bring them to market faster, and lower their cost of goods sold. Learn More »

www.mysql.com

 

 

- Connector/J 클릭해서 들어감

 

 

ZIP 아카이브로 다운/ TAR 아카이브는 유닉스

 

- 다운로드 클릭하고 들어가면 이 화면 뜨는데 로그인 필수로 안해도 된다 ! 아래에 No thanks, 클릭하면 그냥 다운받아짐

 

 

- jar 파일을 클릭하고 복사해줌

 

 

- 이클립스로 돌아가서 JSP 웹 프로젝트 안에 WEB-INF 아래 lib 폴더에 붙여넣어 준다

- JDBC 설치는 프로젝트마다 해줘야함

 

 

 

② 드라이버 로드

 

 

 

 

- 새로운 폴더를 만들어서 DB 연결해보겠다

 

 

 

- 설치한 드라이버를 로드해야하는데 드라이버 이름이 필요하다

- MySql 홈페이지로 돌아가서 DOCUMENTATION 메뉴에 Connectors 탭으로 들어간다

 

 

- Connectors로 들어가면 여러 언어가 있을거고 난 Java 선택

- Java 중에서도 맨 위 Connector/J 8버전 가이드 HTML view 클릭

- 원하면 PDF로 봐도 된다

 

 

 

- 가이드 들어가서 왼쪽 Connector/J Reference 탭 클릭 - 맨 위 6.1로 들어감

 

- 형광펜 칠한게 드라이버 이름이므로 복사해서 코드에 넣어줄거다

 

<%		
	  // 설치한 드라이버를 로드
	  // com.mysql.jdbc.Driver (Mysql-5.xxx)
	  Class.forName("com.mysql.cj.jdbc.Driver"); //Mysql-8.xxx
%>

 

- 위에 만들었던 DBConTest.jsp 파일에 이렇게 써서 로드한다

- 만약 Mysql이 5버전이라면 Class.forName("com.mysql.jdbc.Driver"); 라고 써주면 된다

 

 

- 실행하면 드라이버 로드 성공 !

 

 

 

③ DB 연결

 

 

 

 

<%
	// 2. 드라이버를 사용해서 DB 연결
	Connection con = 
	  	DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb", "root", "1234");
	  
	  
	System.out.println("DB연결 성공!");
	System.out.println(" con : "+con);
%>

 

- DriverManager.getConnection("DB주소", "아이디", "비밀번호");

- DB 주소 : [jdbc:mysql://localhost:포트번호/DB이름]

  · [ 프로토콜 / DB주소(ip) : 포트 / DB명 ]

- DB 종류바뀌면 프로토콜이랑 포트 바뀌어함

 

- DB 주소 중에 포트번호와 비밀번호 Mysql 설치하면서 설정했음

- 아이디는 내가 가진 Mysql에 root계정밖에 없음

 

 

- DB 이름은 내가 가진 jspdb

- 먼저 DB가 있어야 연결됨

 

 

- Connection은 java.sql로 되어있는 인터페이스를 선택해줘야함

 

 

 

 

- 실행하면 DB 연결 성공 !

 

 

 

< Form에서 입력한 정보 DB로 보내기 >

 

- 아이디, 비밀번호, 이름을 실행창에서 입력받아 DB 테이블로 들어가게 하기

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<fieldset>
		<form action="insertPro.jsp" name="fr" 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>	
	</fieldset>
	
	
</body>
</html>

//insertForm.jsp

 

 

- input 타입의 이름을 데이터베이스의 컬럼명과 통일해주는것이 좋다

 

<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<%
	  //한글처리 (post 방식)
	  request.setCharacterEncoding("UTF-8");
	  
	  // 전달된 정보(아이디, 비밀번호, 이름)
	  String id = request.getParameter("id");
	  String pass = request.getParameter("pass");
	  String name = request.getParameter("name");
	%>
	
	<h2>아이디 : <%=id %></h2>
	<h2>비밀번호 : <%=pass %></h2>
	<h2>이름 : <%=name %></h2>
	
	
	<hr>

	<h2>1. 드라이버 로드</h2>
	<%
	  Class.forName("com.mysql.cj.jdbc.Driver");
	  System.out.println("드라이버 로드완료");
	
	%>
	
	<h2>2. 디비연결 </h2>
	<%
	 Connection con = 
	  DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb", "root", "1234");
	
	%>
	 연결상태 : <%=con %><br>
	
	<h2>3. SQL 구문 작성 & Statement(SQL구문 실행객체) 객체 생성 </h2>
	
	
	<%
	  // insert 구문
	  /* String sql = 
	  	"insert into itwill_member(id, pass, name) values('"+id+"','"+pass+"','"+name+"')"; */	  
	
	  // Statement 객체 생성
	  // Statement stmt = con.createStatement();
	
	  String preSql = 
	  	"insert into itwill_member(id, pass, name) values(?,?,?)";
	  
	  // PreparedStatment 객체 생성
	  PreparedStatement pstmt = con.prepareStatement(preSql);
	  
	  // 3-1. ? 처리
	  
	  pstmt.setString(1, id);
	  pstmt.setString(2, pass);
	  pstmt.setString(3, name);
	
	%>
	
	<h2>4. SQL 구문 실행 </h2>
	<%
	  // stmt.executeUpdate(sql);
	
	  pstmt.executeUpdate();
	  System.out.println("회원정보 DB 저장완료!");
	%>	
	
</body>
</html>

// insertPro.jsp

 

 

① Statement 객체 & PreparedStatement 객체

 

- insert 구문에 values 뒤 값을 지정할 때 아래 두가지 방법 모두 사용가능하다

- 하지만 statement 세트 보면 입력 받은 값의 변수로 지정해주었는데 이게 나중에 컬럼이 많아지면 "와' 신경써서 많이 쳐줘야 하므로 불편할것이다

- PreparedStatement는 미리 SQL을 받아서 전달하는 방법

 

- insert문과 객체생성 구문은 한 세트

 

- Statement 객체는 보안상 사용 못함

- 속도가 PreparedStatement가 더 빠름

 

① - ⓐ PreparedStatement의 ? 처리

 

 

- 객체.set컬럼의 데이터타입(?의 위치, ?에 저장될 값);

- SQL 구문의 ? 개수와 set()의 개수는 동일해야함

 

 

① - ⓑ SQL 구문실행

 

- Statement 객체는 executeUpdate(입력받은 sql); 매개변수가 필요

- PreparedStatement는 미리 SQL을 받아보기 때문에 매개변수 필요없다 

 

 

 

- 실행하면 Pro페이지에서 확인가능하고 MySQL 워크밴치 들어가면 테이블 안에 데이터 들어간게 확인가능

 

 

 

※ Mysql 워크밴치 오류로 재설치

 

- MySQL Installer로 들어가서 기존 깔려있던 워크밴치 Remove

- 삭제가 완료되면 맨 위 Add 눌러서 재설치

 

 

 

 

- Add 누르면 다음과 같은 창이 뜨는데 Applications 탭 아래에 Workbench가 있다 

- 난 19로 다운그레이드 했음

 

- 혹시 Mysql이 켜져있지 않다 하면 스키마 옆 Adiministration의 INSTANCE 아래 Startup / Shutdown 으로 서버 껐다 킬 수 있다

 

 

- 또다른 방법으로 컴퓨터에서 서비스로 들어가 서버 중단 / 시작도 가능하다

 

- 메뉴에서 [서비스]라고 검색해서 MYSQL 찾아 더블클릭해줌

 

- 서비스상태가 중단되어있으면 시작 눌러주면됨