728x90
6. 데이터베이스 연결
명령 프롬프트 실행
mysql -u root -p → pw입력 → 접속(mysql>)
- 데이터베이스 만들기(프로젝트 전체 공간(영역 만들기)) → DB 설계
- 데이터베이스 관리할 사용자(관리자 root, 사용자 생성해서 사용)
- 테이블 만들기(프로젝트 전체 공간 안에 주제별로 저장할 공간)
데이터베이스 만들기
- 데이터베이스 만들기 →create database jspdb;
- 데이터베이스 목록 확인 → show databases;
- 데이터베이스 선택(Database changed) → use jspdb
- 테이블 목록
→ show tables; - student 테이블 만들기
→ create table student
(num int primary key,
name varchar(10)
); - 테이블 구조 확인
→ desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| num | int(11) | NO | PRI | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+ - 학생정보저장
→ sql>insert into 테이블이름(컬럼명1, 컬럼명2, ..)
values(값1, 값2,...);
→insert into student(num, name)
valuse(1, '홍길동'); - 학생정보 조회
→ select * from student;
+-----+--------+
| num | name |
+-----+--------+
| 1 | 홍길동 |
+-----+--------+ - 학생정보 수정
→ sql>update 테이블 set 수정할 컬럼명 = 수정할 값,.... where 조건컬럼명 = 값;
→ update student set name='홍길자' where num=1; - 학생정보 조회
→ select * from student;
+-----+--------+
| num | name |
+-----+--------+
| 1 | 홍길자 |
+-----+--------+ - 학생정보 삭제
→ sql> delete from 테이블명 where 조건컬럼명 = 값; (중복되지 않는 것을 조건으로 해야함)
→ delete from student where num=1; - 학생정보 조회
→ select * from student;
Empty set (0.00 sec)
JDBC 프로그램 설치
웹 서버에 데이터베이스 서버에 접속해서 insert, delete, ..
→ JDBC 프로그램 설치(MySQL에서 제공)
MySQL Installer - Community 실행 → add → Connector/J 설치(그림 1, 그림 1-2 참고)
→ mysql-connector-java-8.0.17.jar 설치
→ 이클립스 프로젝트 - src/main/webapp/WEB-INF/lib/ mysql-connector-java-8.0.17.jar 넣기(그림 2 참고)
JSP 2.3& Servlet 3.1 p372, p428 참조
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"
<%@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>
만일 똑같이 학생번호를 입력하면 그림 5와 같이 오류가 난다.
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
'KDT > WEB' 카테고리의 다른 글
231212 WEB - JSP10(데이터베이스 연결) (0) | 2023.12.12 |
---|---|
231211 WEB - JSP9(데이터베이스 연결) (0) | 2023.12.11 |
231207 WEB - JSP7(쿠키) (0) | 2023.12.07 |
231205 WEB - JSP6(객체 범위, 액션태그, 쿠키) (0) | 2023.12.05 |
231201 WEB - JSP5(내장객체) (0) | 2023.12.01 |