KDT/WEB

231208 WEB - JSP8(데이터베이스 연결)

001cloudid 2023. 12. 8. 17:41
728x90

6. 데이터베이스 연결

명령 프롬프트 실행

mysql -u root -p → pw입력 → 접속(mysql>)

 

  • 데이터베이스 만들기(프로젝트 전체 공간(영역 만들기)) → DB 설계
  • 데이터베이스 관리할 사용자(관리자 root, 사용자 생성해서 사용)
  • 테이블 만들기(프로젝트 전체 공간 안에 주제별로 저장할 공간)

 

데이터베이스 만들기

  1. 데이터베이스 만들기 →create database jspdb;
  2. 데이터베이스 목록 확인 → show databases;
  3. 데이터베이스 선택(Database changed) → use jspdb

  4. 테이블 목록
    → show tables;

  5. student 테이블 만들기
    → create table student
    (num int primary key,
    name varchar(10)
    );

  6. 테이블 구조 확인
    → desc student;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | num   | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(10) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+

  7. 학생정보저장
    → sql>insert into 테이블이름(컬럼명1, 컬럼명2, ..)
                values(값1, 값2,...);
    →insert into student(num, name)
        valuse(1, '홍길동');

  8. 학생정보 조회
    → select * from student;
    +-----+--------+
    | num | name   |
    +-----+--------+
    |   1 | 홍길동 |
    +-----+--------+

  9. 학생정보 수정
    → sql>update 테이블 set 수정할 컬럼명 = 수정할 값,.... where 조건컬럼명 = 값;
    → update student set name='홍길자' where num=1;

  10. 학생정보 조회
    → select * from student;
    +-----+--------+
    | num | name   |
    +-----+--------+
    |   1 | 홍길자 |
    +-----+--------+

  11. 학생정보 삭제
    → sql> delete from 테이블명 where 조건컬럼명 = 값; (중복되지 않는 것을 조건으로 해야함)
    → delete from student where num=1;

  12. 학생정보 조회
    → select * from student;
    Empty set (0.00 sec)

JDBC 프로그램 설치

웹 서버에 데이터베이스 서버에 접속해서 insert, delete, ..
→ JDBC 프로그램 설치(MySQL에서 제공)
MySQL Installer - Community 실행 → add → Connector/J 설치(그림 1, 그림 1-2 참고)

그림 1. JDBC 프로그램 설치

→ mysql-connector-java-8.0.17.jar 설치
→ 이클립스 프로젝트 - src/main/webapp/WEB-INF/lib/ mysql-connector-java-8.0.17.jar 넣기(그림 2 참고)

그림 2. src/main/.../lib에 mysql-connector-java-8.0.17.jar 넣기

JSP 2.3& Servlet 3.1 p372, p428 참조

 

1단계 설치한 JDBC 프로그램 중 Drivier.class(자바실행파일) 파일 불러오기

그림 3. mysql-connector-java-8.0.17.jar 안에 Driver.class

 

// Class 실행파일을 관리하는 자바 내장 객체 java.lang.Class.java
// java.lang.Class → 기본폴더이기 때문에 위치를 지정 하지 않고 사용
Class.forName("com.mysql.cj.jdbc.Driver");


2단계 불러온 파일을 이용해서 데이터베이스 연결(데이터베이스 주소, DB 접속 ID, DB 접속 PW) → 연결 정보를 저장

String dbUrl ="jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul"; //데이터베이스 주소 MySQL, Oracle, .. DB마다 주소가 정해져 있음
//?serverTimezone=Asia/Seoul → 서울을 기준으로 데이터베이스 시간을 설정
String dbUser = "root"; //데이터베이스 서버에 접속할 ID
String dbPw = "1234"; //데이터베이스 서버에 접속할 PW. 보안상 좋지 않음.
Connection con = DriverManager.getConnection(dbUrl, dbUser, dbPw);
//.getConnection() → 리턴값은 Connection 내장객체
//Connection : 자바와 데이터베이스 연결 정보를 저장
//import="java.sql.DriverManager java.sql에서 DriverManager.java 파일을 찾아 가져와서 사용
//DriverManager : 불러온 Driver 파일을 이용해서 데이터베이스 연결
//getConnection(url, user, password) url DB주소, user ID, passwory Password
//import="java.sql.Connection"

 

<%@page import="java.sql.Connection"%>

<%@page import="java.sql.DriverManager"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp3/JDBCTest</title>
</head>
<body>
<h1>jsp3/JDBCTest</h1>
<%
// 1단계 설치한 JDBC 프로그램 중 Drivier.class(자바실행파일) 파일 불러오기
// Class 실행파일을 관리하는 자바 내장 객체 java.lang.Class.java
// java.lang.Class → 기본폴더이기 때문에 위치를 지정 하지 않고 사용
Class.forName("com.mysql.cj.jdbc.Driver");

// 2단계 불러온 파일을 이용해서 데이터베이스 연결(데이터베이스 주소, DB 접속 ID, DB 접속 PW)
// → 연결 정보를 저장
String dbUrl ="jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul"; //데이터베이스 주소 MySQL, Oracle, .. DB마다 주소가 정해져 있음
//?serverTimezone=Asia/Seoul → 서울을 기준으로 데이터베이스 시간을 설정
String dbUser = "root"; //데이터베이스 서버에 접속할 ID
String dbPw = "1234"; //데이터베이스 서버에 접속할 PW. 보안상 좋지 않음.
Connection con = DriverManager.getConnection(dbUrl, dbUser, dbPw);
//.getConnection() → 리턴값은 Connection 내장객체
//Connection : 자바와 데이터베이스 연결 정보를 저장
//import="java.sql.DriverManager java.sql에서 DriverManager.java 파일을 찾아 가져와서 사용
//DriverManager : 불러온 Driver 파일을 이용해서 데이터베이스 연결
//getConnection(url, user, password) url DB주소, user ID, passwory Password
//import="java.sql.Connection"
%>
연결 성공 : <%=con %>
</body>
</html>

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp3/insert.jsp</title>
</head>
<body>
<h1>jsp3/insert.jsp</h1>
<h1>학생등록화면</h1>
<form action="insertPro.jsp" method="post">
학생번호 : <input type="text" name="num"><br>
학생이름: <input type="text" name="name"><br>
<input type="submit" value="학생등록"><br>
</form>
</body>
</html>

 

<%@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>jsp3/insertPro.jsp</title>
</head>
<body>
<h1>jsp3/insertPro.jsp</h1>
<h1>학생등록처리 → 데이터베이스 저장</h1>
<%
//사용자가 입력한 정보를 http가 서버에 전달
//→ 서버 request 내장객체에 저장
//→ request 한글처리
request.setCharacterEncoding("utf-8");
//→ request에 저장된 파라미터(num,name)을 가져옴
//→ 변수에 저장
int num = Integer.parseInt(request.getParameter("num")) ;
String name = request.getParameter("name");
%>
학생번호 : <%=num %><br>
학번이름 : <%=name %><br>

<%
//1단계 : 설치한 JDBC 프로그램 중 Drivier.class(자바실행파일) 파일 불러오기
Class.forName("com.mysql.cj.jdbc.Driver");

//2단계 : 불러온 파일을 이용해서 데이터베이스 연결(데이터베이스 주소, DB 접속 ID, DB 접속 PW)
String dbUrl ="jdbc:mysql://localhost:3306/jspdb?serverTimezone=Asia/Seoul";
String dbUser = "root";
String dbPw = "1234";
Connection con = DriverManager.getConnection(dbUrl, dbUser, dbPw);

// 3단계 연결 정보를 이용해서 SQL구문을 만들고 실행할 수 있는 객체 생성(SQL구문을 만들어주는 단계)
//String sql = "insert into student(num,name) value(1,'홍길동')";
String sql = "insert into student(num,name) value("+num+",'"+name+"')";
PreparedStatement pstmt = con.prepareStatement(sql);
//import="java.sql.PreparedStatement"
//PreparedStatement 자바내장객체 : SQL구문을 만들고 실행 할 수 있는 내장 객체
// 4단계 SQL 구문 실행(insert, update, delete)
// → 결과 저장(select)
pstmt.executeUpdate();
// 5단계 결과를 이용하여 출력, 이동(select)
%>
학생등록성공 <%=pstmt %>
</body>
</html>

 

그림 4. 학생등록 후 명령프롬프트 확인

만일 똑같이 학생번호를 입력하면 그림 5와 같이 오류가 난다.

그림 5. primary key 제약 조건으로 오류가 발생

 

String sql = "insert into student(num,name) value("+num+",'"+name+"')";

//또는

String sql = "insert into student(num,name) value(?,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
//객체생성 후 미완성 SQL구문에 ?에 값을 넣기
pstmt.setInt(1, num); //?에 값을 넣을 때 정수형 setInt(물음표 순서,들어갈 값)
pstmt.setString(2, name); //?에 값을 넣을 때 문자열 setString(물음표 순서, 들어갈 값)

 

 

728x90