티스토리 뷰

JSP/인프런 JSP

17. JDBC

GrapeMilk 2020. 2. 21. 19:52

1. JDBC의 정의 및 설정

 - JDBC : Java가 DB와 통신할 수 있게 해주는 API(방법)

 - JDBC에서 제공해주는 API를 이용해서, Java에서 DB로 접근하고 관리할 수 있음.

 - eclipse에서도 Oracle의 API(JDBC)를 이용하기 위해서, Oracle LIB를 eclipse에 복사한다.

 

1-1 Classpath

 - Eclipse -> Window -> Preferences -> Classpath Variables를 확인하여 자바의 lib -> ext 폴더에 오라클 API를 붙여넣으면 JDBC사용 가능 

 

2 JDBC를 이용한 데이터 관리

 

2-1 JDBC 실행 순서 

1) Oracle Driver 로딩 (Driver loading) ex) Class.forName(dirver);

 -> Oracle Driver를 메모리에 로딩한다.

2) Java와 Oracle 연결 (connection) ex) con = DriverManager.getConnection(url, id, pw);

 -> 연결을 위한 con 객체를 얻고, con객체에 url, id, pw값을 넣음으로서 인증 절차를 거친다

3) query 전송 객체 (Statement) stmt = con.createStatement();

 -> Java에서 query를 전송하기 위한 객체

4) query 작성 (query) String sql = "SELECT * FROM book";

 -> 실제 query문 작성 

5) query 전송 (run) res = stmt.executeQuery(sql);

 -> query 전송, Java와 Oracle의 통신

 

2-2 코드 예시

 

1) newBook.jsp

 - name="member_id" : 사용자가 입력한 member id의 값이 들어감.

 - input type="submit" : submit을 누르면 newBook이라는 servlet으로 변수들이 전송이 됨.

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	<form action="newBook" method="post">
		member id : <input type="text" name="member_id"></br>
		member pw : <input type="text" name="member_pw"></br>
		member name: <input type="text" name="member_name"></br>
		member phone : <input type="text" name="member_phone"></br>
		
		<input type="submit" value="book register">
	</form>

</body>
</html>

 

2) NewBook.java

 - newBook.jsp의 데이터를 받는 servlet파일 

 - insert가 정상적으로 실행 됐으면, 문구출력

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/newBook")
public class NewBook extends HttpServlet {


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		//newBook.jsp에서 사용자가 입력한 값을 name의 키워드로 받아옴 
		String memberID = request.getParameter("member_id");
		String memberPW = request.getParameter("member_pw");
		String memberName = request.getParameter("member_name");
		String memberPhone = request.getParameter("member_phone");
		
		// 실제로 데이터베이스를 사용하기 위한 코드 정의
		String driver = "oracle.jdbc.driver.OracleDriver"; //Driver
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; //DB의 IP와 port번호
		String id = "SYS as sysdba";
		String pw = "1234";
		
		Connection con = null; //connection 객체
		Statement stmt = null; // statement 객체
		
		try {
			Class.forName(driver); //driverloading
			
			con = DriverManager.getConnection(url, id, pw);
			stmt = con.createStatement();
			String sql = "INSERT INTO member(ID, PW, NAME, PHONE)";
					sql += " VALUES ( '" + memberID + "', '" + memberPW + "', '" + memberName + "', '" + memberPhone + "')";
			int result = stmt.executeUpdate(sql);
			
			if(result == 1) {
				out.print("INSERT success!!");
			} else {
				out.print("INSERT fail!!");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(stmt != null) stmt.close();
				if(con != null) con.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

3) NewBook2.java

 - select를 수행하는 servlet파일

package com.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/newbook2")
public class NewBook2 extends HttpServlet {


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		//newBook.jsp에서 사용자가 입력한 값을 받아옴 
		/*
		String memberID = request.getParameter("member_id");
		String memberPW = request.getParameter("member_pw");
		String memberName = request.getParameter("member_name");
		String memberPhone = request.getParameter("member_phone");
		*/
		// 실제로 데이터베이스를 사용하기 위한 코드 정의
		String driver = "oracle.jdbc.driver.OracleDriver"; //Driver
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; //DB의 IP와 port번호
		String id = "SYS as sysdba";
		String pw = "1234";
		
		Connection con = null; //connection 객체
		Statement stmt = null; // statement 객체
		ResultSet res = null;
		
		try {
			Class.forName(driver); //driverloading
			
			con = DriverManager.getConnection(url, id, pw);
			stmt = con.createStatement();
			String sql = "SELECT * FROM member";
			res = stmt.executeQuery(sql); //select일 떄만 executeQuery 사용
			// select from을 통해 받아온 data를 res셋에 받아놓는다.
			
			while (res.next()) {
				String memberID = res.getString("member_ID");
				String memberPW = res.getString("member_PW");
				String memberName = res.getString("member_NAME");
				String memberPhone = res.getString("member_PHONE");
				
				out.print("memberID : " + memberID + ", ");
				out.print("memberPW : " + memberPW + ", ");
				out.print("memberName : " + memberName + ", ");
				out.print("memberPhone : " + memberPhone + "<br>");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(stmt != null) stmt.close();
				if(con != null) con.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

3. PreparedStatement

 - JDBC를 좀더 보기 좋은 코드로 작성하기 위한 방법 

 

1) 기존 JDBC 실행 순서 

 

 

2) PreparedStatement 실행 순서

 

 

*JDBC로 select 왜 안되는지. (newbook2.java 파일)

*preparedStatement 코드 작성 및 실습

'JSP > 인프런 JSP' 카테고리의 다른 글

19. Connection Pool  (0) 2020.02.23
18. DAO와 DTO  (2) 2020.02.23
16. 데이터베이스 -1  (0) 2020.02.21
14. 자바 빈  (0) 2020.02.19
13. 예외 페이지  (0) 2020.02.18
댓글