ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JDBC연결-22.04.08
    HTML 2022. 4. 8. 12:44
    728x90

    경로: C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

    복사한후 =>lib에 복사한다.

    *처리 과정 - service객체를 얻어와 메소드를 호출하고 결과 값을 전달 받음
     1. Service에서 Dao호출
     2. Dao에서 spl조회
     3. Dao에서 Service로 값을 반환
     4. Service에서 jsp로 값을 전달

     

    이렇게 만들어서 사용해줄것이다.

    <Service>

    package kr.or.ddit;
    
    import java.util.Map;
    
    public class Service {
    	private Dao dao;
    	private static Service service;
    	
    	//1.private Constructor
    	private Service() {
    		dao = Dao.getInstance();
    	}
    	
    	//2.static method
    	public static Service getInstance() {
    		if(service == null) {
    			service = new Service(); 
    		}
    		return service;
    	}
    	
    	//메소드 생성
    	//접근제한자 리턴타입 메소드명(넘겨주는 값)
    	public Map<String, Object> selectMemberOne(String name){
    		//값을 가져와야 함.. dao에서 전달 받아서
    		Map<String, Object> map = dao.selectMemberOne(name);
    		
    		return map;
    	}
    }

    <Dao>

    package kr.or.ddit;
    
    import java.sql.Statement;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Dao {
    	
    	private static Dao dao;
    	//Dao객체 생성 -싱글톤패턴을 이용해 1회만 생성하여 공유해서 사용
    	/*싱글톤 패턴 : 시스템에 객체를 단 한번만 생성하고 그 객체를 어디서든 접근해 사용하는 패턴
    	   싱글톤 패턴의 특징1. private Constructor
    	                 -인스턴스가 현재 클래스 외 다른 위치에서 생성되는 것을 방지한다.*/
    	private Dao() {}
    	/*싱글톤 패턴의 특징2. static method
    	                  -클래스의 인스턴스는 static method에서 생성된다.*/
    	public static Dao getInstance() {
    		if(dao==null) {
    			dao=new Dao();  //최초 1회 new연산자를 이용해 객체를 메모리에 할당
    		}
    		return dao;
    	}
    	
    	public Map<String, Object> selectMemberOne(String name){
    		//Java와 DB를 연결해주는 객체를 생성하기 위해 도움을 주는 util사용
    		Connection conn = JDBCUtil.getConn();
    		
    		Map<String, Object> map = new HashMap<String, Object>();
    		String sql= "select * from member where mem_name='" + name +"'";
    		try {
    			//sql문장을 실행하는 객체 statement
    			Statement stmt = conn.createStatement();
    			ResultSet rs = stmt.executeQuery(sql);
    			//next(): rs객체가 데이터를 갖고 있을 때 true를 반환 없으면 false반환
    			while(rs.next()) {
    				map.put("id",rs.getNString("mem_id"));
    				map.put("hp",rs.getNString("mem_hp"));
    				map.put("ml",rs.getNString("mem_mail"));
    			}
    			//사용 완료 후 객체 연결 끊기
    			JDBCUtil.close(conn, stmt, rs);
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return map;
    		
    	}
    }

    <JDBCUtil>

    package kr.or.ddit;
    
    import java.sql.Statement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    //DB에 접근하기 위한 Connection객체를 생성하기 위한 정보를 등록
    public class JDBCUtil {
    	//생성자 만들지 않아도 기본적으로 생성자가 구성되지만 사용하지 않고,
    	//public JDBCUtil() {}
    	
    	/*클래스가 초기화 될때(=처음 로딩될때) 한번만 실행
    	 (=static영역에 최초 한번만 드라이버를 생성하고 공유하여 사용)*/
    	static {
    		//드라이버 로딩을 위한 코드 작성
    		//DriverManager를 생성하기 위해 관련 드라이버 정보를 입력
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    	public static Connection conn;
    	public static Connection getConn() {
    		
    		//DriverManger를 통해 연결객체를 생성하기 위한 정보를 입력
    		String url="jdbc:oracle:thin:@localhost:1521:xe";
    		try {
    			conn = DriverManager.getConnection(url, "LAI", "java");
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return conn;
    	}
    	
    	//생성된 Connection 객체 닫기
    	/*  -생성 후 반환(close)하지 않으면 자원의 낭비가 발생되며, 일정 수 이상 발생시 더이상의 생성이 불가 
    	    -Connection객체만 close하더라도 나머지 객체들이 자동 반환되지만 
    	        드라이버마다 동작이 달라 발생할 수 있으므로 모든객체를 역순으로 반환하도록 한다.*/
    	public static void close(Connection conn, Statement stmt, ResultSet rs) {
    		//반환은 역순으로 한다.
    		try {
    			if(rs !=null)  rs.close();
    			if(stmt !=null) stmt.close();
    			if(conn !=null) conn.close();
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		
    	}
    }

    0407폴더에 만든 <arrMethod.html>부분과 연결

    var proc4=function(name){
    	var name=prompt("검색할 이름을 입력하세요!");
    	var idx = arr.indexOf(name);
    	
    	var result="";
    	if(idx == -1){
    		result += `찾는 이름이 없네요~`;
    	}else{
    		result += `${name}님은 ${idx}번째에 있네요~!`;
    		result += `<a href = "detail.jsp?name=${name}"> 상세보기 </a>`;
    	}
    	document.getElementsByTagName('div')[0].innerHTML=result;
    	
    };

    <detail.jsp> 에서 연결되어 출력될 것임

    <%@page import="java.util.Map"%>
    <%@page import="kr.or.ddit.Service"%>
    <%@ 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>
    <style>
    td{
     width: 100px;
     }
    </style>
    </head>
    <body>
    <pre>
    	JDBC를 이용한 DB Connection
    	JDBC(Java DataBase Connectivity)
    	:자바에서 DB에 접속할 수 있도록 하는 Java API
    	(=DB에서 정보를 가져오기 위해 객체를 만들어 연결하는 방식)
    </pre>
    <%
     	//상세 정보를 가져오기 위한 요청데이터로 활용
    	String nm = request.getParameter("name");
    
    	/*처리 과정 - service객체를 얻어와 메소드를 호출하고 결과 값을 전달 받음
    	 1. Service에서 Dao호출
    	 2. Dao에서 spl조회
    	 3. Dao에서 Service로 값을 반환
    	 4. Service에서 jsp로 값을 전달
    	*/
    	Service service = Service.getInstance();
    	Map<String, Object> map = service.selectMemberOne(nm);	
    	String userId = (String)map.get("id");
    	String userHp= (String)map.get("hp");
    	String userMail= (String)map.get("ml");
    %>
    여기서 <%=nm %>의 상세정보를 출력할거야! <br><br>
    
    	<table border="1">
    	 <tr>
    		<td>아이디</td><td><%=userId %></td>
    	 </tr>
    	  <tr>
    		<td>이름</td><td><%=nm %></td>
    	 </tr>
    	  <tr>
    		<td>전화</td><td><%=userHp %></td>
    	 </tr>
    	  <tr>
    		<td>이메일</td><td><%=userMail%></td>
    	 </tr>
    	
    	 
    	</table>
    </body>
    </html>

     

    728x90
Designed by Tistory.