JDBC란, 자바와 DBMS를 연결시켜주는 API(응용 프로그램 인터페이스)이다.
자바 프로그램에서 SQL문을 사용하여 DB에 데이터를 추가하고 삭제하는 작업을 할 수 있게 하는 API.
-DBMS 종류에 상관없이 독립적으로 사용 가능하다.
JSP + Mysql 연결 => JDBC 사용
★JDBC(Java DataBase Connectivity) : 자바와 데이터베이스를 연결하는 도구(API)
0. JDBC 라이브러리 설치 (프로젝트당 1번)
WEB-INF/lib/mysql-connector-j-8.1.0.jar 파일 추가
1. 드라이버 로드
Class.forName("com.mysql.cj.jdbc.Driver"); -- 외워야함
System.out.println("드라이버 로드 성공!");
// 이 작업이 Mysql에서 로그인
⇒ Workbench 실행시킨 느낌
스키마 - jspdb, tables 확인
만약, 연결오류가 생기면
윈도우 - 서비스 - MySQL80
시작 → 중지 : 서비스 중지됨
2. DB 연결
DriverManager.getConnection(jdbc:mysql://localhost:3306/jspdb", "root", "1234");
// dburl, user, password
System.out.println("DB연결 성공!");
여기까지가 2단계!
주석
ctrl + / : -- 주석문
/* 주석문 */
SELECT * FROM jspdb.itwill_member;
→ use 명령어 안쓰고 select문 가능
// 2. DB 연결
Connection con
= DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb", "root", "1234");
System.out.println("DB연결 성공!");
System.out.println("con : " + con);
해시코드 : 객체에게 부여되는 고유한 값
- 해시코드 통해 → 객체가 있구나
- ConnectionImpl 클래스로 만들어졌구나
- com.mysql.cj.jdbc 패키지 안에 있구나
<%@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>Insert title here</title>
</head>
<body>
<h1> insert.jsp (SQL구문 실행)</h1>
<%
// 0. 드라이버(라이브버리) 설치
// 1. 드라이버 로드
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("드라이버 로드성공!");
// 2. DB연결
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb", "root", "1234");
System.out.println("DB 연결성공!");
System.out.println("con : " + con);
%>
</body>
</html>
3. sql 구문 작성 & stmt(statement) 객체 생성
Statement - SQL 구문을 실행하게 하는 객체
Statement stmt = con.createStatement();
// sql 구문에는 세미콜론(;) 제거해야함
String sql
= "insert into itwill_member(idx, name, gender, age, jumin) values(null, '아이티윌','M', 22, '000101-1234657')";
4. sql 실행
stmt.executeUpdate(sql);
System.out.println("정상 실행 완료!");
정리!!!
- 드라이버 설치
- 드라이버 로드
- DB연결
- sql 실행
<%@ 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> /jdbc/insertForm.jsp </h1>
<h2> 사용자가 정보를 입력하는 페이지 </h2>
<fieldset>
<form action="insertPro.jsp" method="post">
이름 : <input type="text" name="name"> <br>
성별 : <input type="radio" name="gender" value="남성"> 남성
<input type="radio" name="gender" value="여성"> 여성 <br>
나이 : <input type="number" name="age"> <br>
주민번호 : <input type="text" name="ju1">-<input type="text" name="ju2"> <br>
<input type="submit" value="정보전달">
</form>
</fieldset>
</body>
</html>
<%@ 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> insertPro.jsp </h1>
<!-- 전달정보 저장 -->
<%
// 한글처리 (post방식은 한글 인코딩 필요)
request.setCharacterEncoding("UTF-8");
// 전달정보(파라메터) 저장
String name = request.getParameter("name");
String gender = request.getParameter("gender");
int age = Integer.parseInt(request.getParameter("age"));
String ju1 = request.getParameter("ju1");
String ju2 = request.getParameter("ju2");
String jumin = ju1+"-"+ju2; // 연결자를 사용한 문자열 합치기
%>
이름 : <%=name %><br>
성별 : <%=gender %><br>
나이 : <%=age %><br>
주민번호 : <%=ju1 %>-<%=ju2 %><br>
</body>
</html>
<h2> 전달받은 정보를 DB(Mysql)로 전달 </h2>
<%
// 디비연결 정보 (상수)
final String DRIVER = "com.mysql.cj.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/jspdb";
final String DBID = "root";
final String DBPW = "1234";
// 1. 드라이버 로드
Class.forName(DRIVER);
System.out.println(" 드라이버로드 성공! ");
// 2. 디비 연결
Connection con = DriverManager.getConnection(DBURL, DBID, DBPW);
System.out.println(" 디비연결 성공! ");
// 3. sql구문 작성 & stmt 객체
String sql
="insert into itwill_member(idx,name,gender,age,jumin) values(null,'"+name+"','"+gender+"',"+age+",'"+jumin+"')";
// 문자열 연결자를 사용함
Statement stmt = con.createStatement();
// 4. SQL 실행
stmt.executeUpdate(sql);
System.out.println("회원정보 저장완료!");
%>
//Statement stmt = con.createStatement();
PreparedStatement pstmt = con.prepareStatement(sql);
// 4. SQL 실행
// stmt.executeUpdate(sql);
pstmt.executeUpdate();
Statement → PreparedStatement
차이점 ⇒ “처리속도”
Statement : sql 따로 만들고 불러옴, PreparedStatement보다 느림
PreparedStatement : sql가 전처리됨, Statement보다 빠름, values에 ?가 들어있어도 사용 가능
// 3. sql구문 작성 & stmt 객체
// String sql
// ="insert into itwill_member(idx,name,gender,age,jumin) values(null,'"+name+"','"+gender+"',"+age+",'"+jumin+"')";
String sql
="insert into itwill_member(idx,name,gender,age,jumin) values(null,?,?,?,?)";
//Statement stmt = con.createStatement();
PreparedStatement pstmt = con.prepareStatement(sql);
// ??? - 정보추가(? 개수 == setXXX개수)
// pstmt.setXXXXX(?의 위치,저장하는 데이터 값);
// (1번 물음표(?의 위치)에, name이라는 변수 넣겠다.)
// XXXXX : 내가 저장하려는 데이터타입
pstmt.setString(1, name); // 1번 물음표에 name이라는 변수 넣겠다
pstmt.setString(2, gender);
pstmt.setInt(3, age);
pstmt.setString(4, jumin);
// 4. SQL 실행
// stmt.executeUpdate(sql);
pstmt.executeUpdate();
// 실행의 결과가 테이블에 변화를 주는 경우 executeUpdate() 사용
System.out.println("회원정보 저장완료!");
pstmt.executeUpdate(); // insert문을 수행할 때
pstmt.executeQuery(); // select문을 수행할 때
ResultSet rs = pstmt.executeQuery(); // select문을 수행할 때
커서를 움직일 때마다 한 사람의 정보 조회
그 전 커서 - 비활성화, 다음 커서만 활성화됨
레코드 셋의 끝까지(EOF) 진행함
5. 데이터처리 (DB 정보를 화면에 출력)
// rs.next() : 레코드셋의 커서를 다음으로 이동
// 데이터가 있는지 없는지 체크
// 데이터가 있을때 true, 없을때 false
if(rs.next()) { // 데이터 있을 때 //next() - boolean
// 데이터가 있을때 => 해당데이터 활성화
// 테이블 데이터 -> 화면 출력
out.println("번호: " + rs.getInt("idx"));
}
getInt”idx” : 정수형인 idx값을 가져옴
변경사항이 적용안될때
<table border='1'>
<tr>
<td>번호</td>
<td>이름</td>
<td>성별</td>
<td>나이</td>
<td>주민번호</td>
</tr>
<%while(rs.next()){ %>
<tr>
<td><%=rs.getInt("idx") %></td>
<td><%=rs.getString("name") %></td>
<td><%=rs.getString("gender") %></td>
<td><%=rs.getInt("age") %></td>
<td><%=rs.getString("jumin") %></td>
</tr>
<%} %>
</table>
re.getXXX("컬럼명") : 가져올 데이터 타입에 맞는 메서드 호출 re.getXXX(인덱스번호) : 가져올 데이터 타입에 맞는 메서드 호출 => 인덱스를 사용한 방법이 처리속도가 빠르다.
메서드 시그니처 : 컴파일러가 메서드를 구분하는 요소 3가지
- 메서드 이름
- 전달인자의 데이터타입
- 전달인자의 개수
메서드 오버로딩 : 동일한 이름의 메서드를 사용하는 것
전달인자의 정보(타입, 개수)를 다르게 해서 사용함
'JSP·Servlet' 카테고리의 다른 글
[JSP] JDBC - delete (0) | 2023.09.21 |
---|---|
[JSP] JDBC - update (0) | 2023.09.21 |
[JSP] 파일 다운로드 심화편 (1) (0) | 2023.09.21 |
[JSP] 파일 다운로드 기초편 (0) | 2023.09.21 |
[JSP] 파일 업로드 (0) | 2023.09.21 |