웹프로젝트를 할 때에 oracle 이나 my-sql 등을 사용하여 db 연동 후에 프로젝트를 생성하는데요. 이는 프로젝트를 하는데 있어 가장 기본이 되는 작업중에 하나인데요.
그래서 jdbc를 이용하면 jsp oracle 연동 방법을 소개해 드리고 연결된 db에 존재하는 데이터를 가져와서 html로 뿌려주는 예제를 보여드리도록 하겠습니다.
1. JDBC란
Java 프로그램 내에서 데이터 베이스 내의 데이터를 사용하기 위해 SQL이 필요하게 되는데 이를 연결해 주는 응용프로그램 인터페이스
2. 연결순서
1) Driver Loading
– DB와의 연결위해 DBMC에서 제공하는 jar파일 Driver를 메모리에 적재
ex) oracle.jdbc.driver.OracleDriver;
2) Connection
– 해당 드라이버를 사용하여 DB를 연결
ex) String url = “jdbc:oracle:thin:@localhost:1521:ORCL”;
conn=DriverManager.getConnection(url,”scott”,”tiger”);
3) 쿼리 전달
– 쿼리를 DB로 전달하기 위해 Statement, PreparedStatement 객체를 생성
ex) pstmt=conn.prepareStatement(sql);
4) 결과
– 전달된 쿼리의 수행으로 인한 반환값
ex) ResultSet rs=pstmt.executeQuery();
밑의 예제를 통해서 한번 db 연동 방법에 대해서 알아보겠습니다.
밑의 예제소스를 복사하시거나 밑의 파일을 받아서 임포트 시키시기 바랍니다.
DB파일 복사
오라클 설치 경로 : \app\Administrator\product\11.2.0\dbhome_1\jdbc 에서 ojdbc6.jar를 복사하여 WEB-INF\lib에 복사
소스코드 리뷰
Controller.java
import java.io.IOException; import java.sql.SQLException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Controller extends HttpServlet{ public Controller() { // TODO Auto-generated constructor stub } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub Dao db = new Dao(); List<DTO> dto = null; try { dto = db.selectid(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } req.setAttribute("list", dto); RequestDispatcher rd = req.getRequestDispatcher("/result.jsp"); rd.forward(req, resp); } }
DAO.java
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import test.DTO; public class Dao { String driver="oracle.jdbc.driver.OracleDriver"; String url="jdbc:oracle:thin:@localhost:1521:ORCL"; String sql = "select ename, job from emp "; Connection conn; PreparedStatement pstmt; ResultSet rs; List<DTO> dto = new ArrayList<>(); DTO dt; @SuppressWarnings("unchecked") public List<DTO> selectid() throws ClassNotFoundException, SQLException { Class.forName(driver); // ② 데이터베이스 connection conn=DriverManager.getConnection(url,"scott","tiger"); // ③ 쿼리(sql)문장을 실행하기 위한 객체 생성 pstmt=conn.prepareStatement(sql); // ④ 쿼리 실행 rs=pstmt.executeQuery(); // ⑤ 쿼리 실행의 결과값(int, ResultSet) 사용 while(rs.next()){ dt = new DTO(); dt.setEname(rs.getString(1)); dt.setJob(rs.getString(2)); dto.add(dt); } rs.close(); pstmt.close(); conn.close(); return dto; } }
DTO.java
package test; public class DTO { private String ename; private String job; public DTO() { // TODO Auto-generated constructor stub } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public DTO(String ename, String job) { super(); this.ename = ename; this.job = job; } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>JDBCTest</display-name> <servlet> <servlet-name>test</servlet-name> <servlet-class>test.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>view.jsp</welcome-file> </welcome-file-list> </web-app>
view.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="test"> <input type="submit" value="DB값 가져오기"> </form> </body> </html>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="test.DTO,java.util.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% ArrayList<DTO> list = (ArrayList<DTO>)request.getAttribute("list"); for(int i=0; i<list.size(); i++){ %> <Input type='text' value='<%=list.get(i).getEname() %>'> <Input type='text' value='<%=list.get(i).getJob() %>'><br> <% } %> </body> </html>
소스코드를 구현한 모습
위와 같이 jsp oracle 연동 후에 테스트 데이터를 그려본 모습입니다.
연동 부분이 한번에 되지 않을 수 있으니 제공된 소스코드를 통해 연습해 보시기 바랍니다.
답글 남기기