파일 구조는 다음과 같이 구성하였다.


controller는 기능들이 실행될 class


vo는 여러가지로 표현할 수 있는데 DB에선 엔터티라고 하고 데이터 테이블이 들어올 클래스이다.


dao는 db 데이터를 끌어올 기능을 넣을 class 이다.


자세한 설명은 예제의 주석에서 확인하자.


먼저 Employee 테이블이 들어갈 클래스 작성



package model.vo;

import java.sql.Date;

// 보통 vo 클래스 파일의 이름을 DB의 이름과 같게한다.

// vo(value object) == entity == record == row
// do(domain object) == dto(data transfer object)
// DB 테이블의 한 행의 정보가 기록되는 저장용 객체

// 1. 반드시 캡슐화가 적용되어야 한다 : 모든 필드는 private가 된다.
// 2. 기본 생성자와 매개변수 있는 생성자를 작성해야 한다. (매개변수가 있는 생성자가 있다면 기본 생성자를 jvm에서 생성해주지 않기 때문)
// 3. 모든 필드에 대해 getter와 setter 작성해야 한다.
// 4. 직렬화 처리를 해야 한다.
// optional. toString() 오버라이딩 <- 필드값을 확인하기 위해

public class Employee implements java.io.Serializable{
	private int empNo;
	private String empName;
	private String job;
	private int mgr;
	private Date hireDate;
	private int sal;
	private int comm;
	private int deptNo;
	// 이러한 객체를 vo 객체라고 할 수 있다.
	
	public Employee() {
		
	}
	
	public Employee(int empNo, String empName, String job, int mgr, Date hireDate, int sal, int comm, int deptNo) {
		super();
		this.empNo = empNo;
		this.empName = empName;
		this.job = job;
		this.mgr = mgr;
		this.hireDate = hireDate;
		this.sal = sal;
		this.comm = comm;
		this.deptNo = deptNo;
	}
	
	public Employee(int empNo, String empName, String job, int mgr, int sal, int comm, int deptNo) {
		super();
		this.empNo = empNo;
		this.empName = empName;
		this.job = job;
		this.mgr = mgr;
		this.sal = sal;
		this.comm = comm;
		this.deptNo = deptNo;
	}

	public int getEmpNo() {
		return empNo;
	}

	public void setEmpNo(int empNo) {
		this.empNo = empNo;
	}

	public String getEmpName() {
		return empName;
	}

	public void setEmpName(String empName) {
		this.empName = empName;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}

	public int getMgr() {
		return mgr;
	}

	public void setMgr(int mgr) {
		this.mgr = mgr;
	}

	public Date getHireDate() {
		return hireDate;
	}

	public void setHireDate(Date hireDate) {
		this.hireDate = hireDate;
	}

	public int getSal() {
		return sal;
	}

	public void setSal(int sal) {
		this.sal = sal;
	}

	public int getComm() {
		return comm;
	}

	public void setComm(int comm) {
		this.comm = comm;
	}

	public int getDeptNo() {
		return deptNo;
	}

	public void setDeptNo(int deptNo) {
		this.deptNo = deptNo;
	}
	
	
	
	
}




다음으로는 메인(TestMain)에 JDBCModel 추가



package controller;

import model.dao.JDBCModel;
import model.vo.Employee;

public class TestMain {

	public static void main(String[] args) {
		JDBCModel model = new JDBCModel();
		
		전체 조회
		model.testJDBC();
		
	}

}



다음으로는 JDBCModel에서 db를 불러오고 사용하는 작업



package model.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import model.vo.Employee;

public class JDBCModel {
	// 사원 전체 조회용 메소드
	public void testJDBC() {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;
		// ctrl + shift + O 를 누르면 import 해야하는 항목이 나옴.
		
		// 1. 해당 데이터 베이스에 대한 라이브러리 등록 작업
		// Class.forName("클래스명"); // ClassNotFoundException 처리를 해야 함
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			// 2.데이터베이스와 연결함  // SQLException 처리를 해야한다.
			conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe", "scott", "tiger");
			
			System.out.println(conn);
			
			// 3. 쿼리문 작성 후 DB에서 쿼리문 실행시키고 결과를 가지고 옴
			String query = "SELECT * FROM EMP";
			
			stmt = conn.createStatement();
			
			rset = stmt.executeQuery(query);
			
			while (rset.next()) {
				System.out.println(rset.getInt("EMPNO") + ", " + 
									rset.getString("ENAME") + ", " +
									rset.getString("JOB") + ", " +
									rset.getInt("MGR") + ", " +
									rset.getDate("HIREDATE") + ", " + 
									rset.getInt("SAL") + ", " +
									rset.getInt("COMM") + ", " +
									rset.getInt("DEPTNO")
						);
				
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 4. DB와 관련된 객체는 반드시 close 해야 함
				rset.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	}

}



위와 같이 작성하고


Main 클래스를 실행하면 다음과 같이 콘솔에 연결 정보가 출력된다.








오라클 db 설치와 sql developer 설치는 저번 게시물을 참조.


Start Database로 db를 실행


sql developer에 system 계정으로 다음 sql문을 실행한다.




scott 계정, 비밀번호 tiger 이라고 생성하고 권한을 설정하는 문장이다.


scott 계정은 일반적으로 사용하는 교육용 계정.






다음으로는 좌측의 새 접속 설정을 한다.




좌측의 초록색 십자가


접속 이름은 마음대로


사용자 이름, 비밀번호는 아까 만든 scott, tiger


비밀번호 저장 체크


저장을 누르고 테스트


테스트가 정상적으로 된다면 잘 생성이 된 것이다.






다음으로는 이클립스를 실행하고 마음에 드는 위치에 Workspace를 새로 만든다.


첫 화면, 환영합니다. 를 꺼주고 다음 빨간 네모박스의 버튼에 따라 Java 환경으로 킨다.




그리고 좌측의 Package 리스트 빼고 전부 닫은 후



콘솔과 네비게이터를 열어주자.



다음으로는 Preference 설정으로 예전에 JS 설정 했을 때를 참조하여 똑같이 설정하면 된다.






다음으로는 navigator에 java Project를 생성


사진처럼 따라한다.






다음으로 프로젝트 src 폴더에 controller, model(dao, vo)를 생성한다.




이제 sql을 사용하기 위한 Library 파일을 불러온다.


계속 사용했던 oracle에 설치 폴더에 있는 파일을 불러온다.


경로는 설치 경로 + oraclexe/app/oracle/product/11.2.0/server/jdbc/lib 에 ojdbc6이라는 파일이 존재한다.





버젼이 바뀌면서 경로가 달라질 수 있다.


위치를 확인했다면 이클립스에서 좌측 프로젝트에 우클릭 맨 아래의


Properties를 누른다.






다음으로 Build Path에 Library 항목에


Add External JARs, 외부의 JAR 파일(아까 확인한 오라클 경로의 파일)을 추가한다.





추가하면 좌측의 Package Explorer에서 확인할 수 있다.






다음 게시물은 이클립스에서 DB의 데이터를 불러오는 방법을 설명한다.















※ 추가로 sql developer에 다음 sql문을 추가하여 실행하자(F5를 누르면 일괄 실행된다.)


처음 drop 부분은 오류가 발생할 수 있다. 테이블이 없다면...



drop table emp;
drop table dept;
drop table bonus;
drop table salgrade;


CREATE TABLE EMP
(EMPNO number not null,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR number,
HIREDATE date,
SAL number,
COMM number,
DEPTNO number);

INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,'1980-12-17',800,null,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,200,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,'1981-04-02',2975,30,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,300,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,'1981-04-01',2850,null,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,'1981-06-01',2450,null,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,'1982-10-09',3000,null,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',null,'1981-11-17',5000,3500,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,'1983-01-12',1100,null,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,'1981-10-03',950,null,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,'1981-10-3',3000,null,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,'1982-01-23',1300,null,10);

CREATE TABLE DEPT
(DEPTNO number,
DNAME VARCHAR2(14),
LOC VARCHAR2(13) );

INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');

CREATE TABLE BONUS
(
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
SAL number,
COMM number
);


CREATE TABLE SALGRADE
( GRADE number,
LOSAL number,
HISAL number);

INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);

commit;



객체가 안의 요소를 감추고  부드럽게 보여주고 하는 효과와


서서히 사라지거나 보여주는 효과 두 가지 slide, fade


slideDown()


slideUp()


slideToggle()


fadeIn()


fadeOut()


fadeToggle()



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style type="text/css">
	div {
		width: 300px;
		height: 30px;
		background: yellowgreen;
		color: orangered;
		border-radius: 10px;
		text-align: center;
		border: 1px solid green;
		cursor: pointer;
	}
	p {
		border: 1px solid lightgray;
		width: 300px;
		height: 20px;
		display: none;
	}
</style>
</head>
<body>
	<h1>slide 메소드</h1>
	<h3>slideDown()과 slideUp()</h3>
	
	<div>첫 번째 메뉴</div>
	<p class="contents">내용</p>
	<div>두 번째 메뉴</div>
	<p class="contents">내용</p>
	<div>세 번째 메뉴</div>
	<p class="contents">내용</p>
	<div>네 번째 메뉴</div>
	<p class="contents">내용</p>
	<div>다섯 번째 메뉴</div>
	<p class="contents">내용</p>
	
	<script type="text/javascript">
		$(function() {
			$(".contents").slideUp();
			
			$("div").click(function() {
				// $(this).next("p").slideDown();
				$(this).next("p").slideToggle(3000, function() {
					alert("토글 완료!");
				});
			});
		});
	</script>
</body>
</html>



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
	<h1>fade() 메소드</h1>
	<h3>fadeIn()와 fadeOut()</h3>
	<button id="fadein">fadeIn()</button>
	<button id="fadeout">fadeOut()</button>
	<br>
	<img id="flower" src="../image/flower1.PNG">
	
	<script type="text/javascript">
		$(function() {
			$("#fadein").click(function() {
				$("img").fadeIn(1000);
			});
			$("#fadeout").click(function() {
				$("img").fadeOut(1000);
			});
		});
	</script>
	
	<hr>
	
	<button id="toggle">fadeOut()</button>
	<br>
	<img id="forest" src="../image/forest1.PNG">
	<script type="text/javascript">
		$(function() {
			$("#toggle").click(function() {
				$("#forest").fadeToggle(2000, function() {
					alert("토글 완료");
				});
			});
		});
	</script>
</body>
</html>


+ Recent posts