JDBC 연동 및 사용법

Lee kyu min·2024년 3월 5일

SQL

목록 보기
11/11

JDBC

  • 자바 프로그램에서 데이터베이스에 일관된 방식으로 접근할 수 있도록 API를 제공하는 클래스 집합

1. 데이터 베이스 연결 절차 및 단계별 사용되는 인터페이스(클래스)

1) JDBC 드라이버 로드 //DriverManager
2) 데이터베이스 연결 //Connection
3) SQL문 실행 //Statement
4) 데이터베이스 연결 끊음 //ResultSet

ex)오라클
C드라이브 > oraclexe > app > oracle > product > 11.2.0 > server >jdbc > lib 경로의
ojdbc6.jar 파일
java 프로젝트 lib에 붙여넣기

2. 데이터베이스 정보 출력

import java.sql.*;

1) Connection : 데이터베이스와 연결

DriverManger.getConnection()

2) Statement : 질의, 갱신 실행

connection.createStatement()

3) ResultSet : 결과물

statement.executeQuery()

ex)

<%@page import="java.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>
	<table width="800" border="1">
		<tr>
			<th>이름</th>
			<th>아이디</th>
			<th>암호</th>
			<th>이메일</th>
			<th>전화번호</th>
			<th>권한(1:관리자, 0:일반회원)</th>
		</tr>
		<%
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		String sql = "select * from member";
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver"); //1. 드라이브 로드
			con = DriverManager.getConnection(url, "ezen", "1234"); //2. 데이터베이스 연결
			stmt = con.createStatement(); //3. sql구문 전송
			rs = stmt.executeQuery(sql); // sql 실행 결과를 rs 참조
			while (rs.next()) {		//값 출력
				out.println("<tr>");
				out.println("<td>" + rs.getString("name") + "</td>");		//JDBC member 테이블내 name 행 출력
				out.println("<td>" + rs.getString("userid") + "</td>");
				out.println("<td>" + rs.getString("pwd") + "</td>");
				out.println("<td>" + rs.getString("email") + "</td>");
				out.println("<td>" + rs.getString("phone") + "</td>");
				out.println("<td>" + rs.getString("admin") + "</td>");
				out.println("</tr>");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs != null) rs.close();
				if (stmt != null) stmt.close();
				if (con != null) con.close();
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
		%>
	</table>
</body>
</html>

4). 구조도

(출처 : 불여일타 JSP&Servlet)

3. 데이터 베이스 정보 저장

  • sql문에서 저장법
INSERT INTO MEMBER VALUES('name', 'userid', 'pwd', 'email', 'phone', 'admin')
//MEMBER 테이블에 각 행에 해당하는 값 저장

* java에서 저장법(PreparedStatement 인터페이스)

1). PreparedStatement 객체 생성

String sql = "insert into member values(?, ?, ?, ?, ?, ?)";		
PreparedStatement pstmt = con.prepareStatement(sql);
  • 테이블 각 행에 추가할 값을 직접 지정하지않고 ?(바인드 변수)로 표시

2). 바인드 변수로 지정된 인자에 값 할당

setXXX(int 순서, 실제 데이터나 변수);
  • XXX : 데이터 형 이름 EX) 정수형 -> setInt(), 문자열 형 setString()
    ex)
pstmt.setString(1, name);
pstmt.setString(2, userid);
pstmt.setString(3, pwd);
pstmt.setString(4, email);
pstmt.setString(5, phone);
pstmt.setInt(6, Integer.parseInt(admin));

3). PreparedStatement 객체로 쿼리문 실행

pstmt.executeUpdate();		//setXXX()로 저장한 값 데이터베이스에 갱신
pstmt.close();				//PreparedStatement 객체 해제

ex)

<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%!
	Connection con = null;
	PreparedStatement pstmt = null;
	
	String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
	String username = "ezen";
	String password = "1234";
	String sql = "insert into member values(?, ?, ?, ?, ?, ?)";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	request.setCharacterEncoding("utf-8");

	String name = request.getParameter("name");
	String userid = request.getParameter("userid");
	String pwd = request.getParameter("pwd");
	String email = request.getParameter("email");
	String phone = request.getParameter("phone");
	String admin = request.getParameter("admin");
	
	try{
		//1. 드라이브 로드
		Class.forName("oracle.jdbc.driver.OracleDriver");
		//2. 데이타베이스 연결
		con = DriverManager.getConnection(url,username,password);
		//3. sql문장 전송
		pstmt = con.prepareStatement(sql);
		
		//4. 매핑.  String sql = "insert into member values(?, ?, ?, ?, ?, ?)";
		pstmt.setString(1, name);
		pstmt.setString(2, userid);
		pstmt.setString(3, pwd);
		pstmt.setString(4, email);
		pstmt.setString(5, phone);
		pstmt.setInt(6, Integer.parseInt(admin) );
		
		//5. sql구문 실행
		int result = pstmt.executeUpdate();
		System.out.println("저장 성공 이니 : " + result);
		
	}catch(Exception e){
		e.printStackTrace();
	}finally{
		try{
			//자원반납
			if(pstmt != null) pstmt.close();
			if(con != null) con.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
%>
<h3>회원 가입 성공</h3>
<a href="01_allMember.jsp">전체 회원 목록 보기</a>

</body>
</html>
  • SQL문이 select이면 excuteQuery()로 ResultSet을 얻는다
  • SQL문이 delete, update, insert이면 excuteUpdate()로 데이터베이스를 갱신한다.

0개의 댓글