JDBC : Java DataBase Connectivity
- Java에서 DBMS의 종류와 관계없이 데이터베이스를 조작하기 위한 API를 의미
- JDBC를 간단하게 요약하면 메서드 호출용 SQL 인터페이스라고 표현할 수 있음.
JDBC 드라이버란?
- 다양한 DBMS 제조사들은 본사에서 개발한 DBMS를 Sun 사의 Java 프로그램과 연동할 수 있도록 기술을 지원하는 것을 의미
- JDBC는 MySQL 설치과정에서 이미 설치하였으므로 따로 설치할 필요는 없지만
- JDBC 드라이버가 어느 폴더에 저장되어 있는지에 대해서는 알고 있어야 함.
JDBC 드라이버 연동
- MySQL 설치 과정에서 JDBC 드라이버도 설치하였는데 C:\Program Files (x82)\MySQL\Connector J 8.0 폴더 안에 있는 mysql-connector-java-8.0.26.jar 파일이다.
- 이 파일을 eclipse 프로젝트의 WEB-INF/lib에 붙여넣기 해주면 sql 연동이 가능하다.
데이터베이스 연동하여 회원가입 프로그램 만들기
- 예전에 사용한 Info.jsp로 입력받아서 id,password,email만 DB에 저장하도록 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String id = request.getParameter("p_id");
String pw = request.getParameter("p_pw");
String email = request.getParameter("p_email");
String sql = "INSERT INTO members(id,passwd,email) VALUES";
sql += "('" +id+"','"+pw+"','"+email+"')";
//1. 변수 선언
String driverName = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/odbo";
String username = "root";
String password = "qwer1234";
Connection conn = null;
try{
//2. 드라이버 로딩
Class.forName(driverName);
//3. 연동
conn = DriverManager.getConnection(url,username,password);
Statement sm = conn.createStatement();
//4. 사용
out.println(">>연결 성공 :" + conn);
int count = sm.executeUpdate(sql);
if(count == 1){
out.println("회원 가입 성공!");
}else{
out.println("회원 가입 실패!");
};
sm.close();
}catch(ClassNotFoundException e){
out.println(">>연결 실패 : 드라이버 복사 필요!");
}catch(SQLException e){
out.println(">>연결 실패 : SQL 명령문 확인 필요!");
}finally{
//5.닫기
try{
if(conn != null)
conn.close();
}catch(SQLException e){
;
}
}
%>
</body>
</html>
입력 예시
ResultSet 클래스
- members 테이블에 등록된 데이터를 가져올 때 사용
회원 정보 출력 프로그램
- ResultSet 클래스의 next()를 사용하여 DB의 값을 다 읽을 때까지 next()하여 읽어 들이는 방식
<%@ page import= "java.sql.*" %>
<%
String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/odbo";
String username = "root";
String password = "qwer1234";
Connection conn = null;
Class.forName(driverName);
conn = DriverManager.getConnection(url, username,password);
Statement sm = conn.createStatement();
ResultSet rs = sm.executeQuery("SELECT * FROM members");
String str = "";
int count = 1;
while(rs.next()){
str += count + " : " + rs.getString("id") + " / " + rs.getString("passwd")+" / "
+ rs.getString("email")+" / " + rs.getString("signuptime") + "<br>";
count ++;
}
out.print("Home > 회원 가입 명단 <hr>");
out.print(str);
rs.close();
sm.close();
conn.close();
%>
members 테이블에서 정보 삭제
- id , pw 값을 입력받아서 일치한다면 테이블에서 삭제하는 예제이다.
- setString 을 사용하여 ? 값을 원하는 u_id, u_pw 값으로 변경이 가능하다.
<%@ page import = "java.sql.*" %>
<%
String u_id = request.getParameter("userID");
String u_pw = request.getParameter("userPW");
String sql = "DELETE FROM members WHERE id = ? and passwd = ?";
String driverName = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/odbo";
String username = "root";
String password = "qwer1234";
Connection conn = null;
Class.forName(driverName);
conn = DriverManager.getConnection(url,username,password);
PreparedStatement sm = conn.prepareStatement(sql);
sm.setString(1, u_id);
sm.setString(2,u_pw);
int count = sm.executeUpdate();
if(count == 1){
out.print("회원 탈퇴 성공!");
}else{
out.print("회원 탈퇴 실패!");
}
sm.close();
conn.close();
%>