< MARIADB >
sql 파일 추가하기 SOURCE C:\TEMP\EMPLOYESS.SQL
show databases;
< 데이터베이스 개념 >
DAO(Data Access Object)
DAO는 실제로 DB의 data에 접근하기 위한 객체입니다.
DTO(Data Transfer Object)
DTO는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(Java Beans)입니다
VO(value Object)
도메인에서 한 개 또는 그 이상의 속성들을 묶어서 특정 값을 나타내는 객체를 의미
< 예외처리 >
예외 처리(例外 處理) 또는 오류 처리는 일반적인 실행의 흐름을 바꾸는 몇 가지 조건을 처리하도록 설계한 프로그래밍 언어의 개념이나 컴퓨터 하드웨어 구조를 말한다. 일반적으로 프로그램이 처리되는 동안 특정한 문제가 일어났을 때 처리를 중단하고 다른 처리를 하는 것을 예외 처리라고 한다.
< 예외, 오류, 핸들링, try - catch - finally >
자바에서는 예외라는 것을 두고 목적에 따라서 핸들링(처리)하도록 되어있음.
오류(Error)와 예외(Exception)로 나눔
예외는 주로 실행 시에 발생되는 모든 에러 상황을 예외로 정의함.
특정 API는 컴파일 시 예외를 처리하지 않으면 컴파일이 되지 않기도 함.
예외의 정의
실행 시 발생할 수 있는 모든 에러 상황
예외 발생 순서 :
컴파일 -> 실행 -> 실행중 예외 발생 -> VM이 발생된 예외의 종류/내용 파악
-> 예외 객체 생성 -> 발생된 코드 밖으로 예외 객체를 던짐 (throw)
-> 예외의 콜 스택에 전이 -> main 메소드 밖까지 던지게 되면 프로그램 비정상 종료
예외는 던지다(throw)로 표현
예외는 객체이기 때문에 클래스로 정의되어 있음.
예외의 최고 클래스는 lang 패키지의 Throwable
예외의 자식 Error, Exception
Error의 하위 타입은 일반적으로 JAVA의 실행기인 JVM에 관련된 에러 사항
이러한 문제들은 프로그래머가 처리 불가한 VM, JRE 전체의 문제이기도 함.
프로그래머는 Error의 하위 타입 예외들은 처리하지 않고 무시함!
Exception : 클래스의 하위 타입, 프로그래머가 처리할 예외 타입
예외라고 표현할 때 최고 클래스로 Exception 클래스를 말함.
Throwable 클래스는 자식으로 Error을 가지고 있기 때문에 최고 클래스라고 하지 않음.
예외의 종류
알려지지 않은 예외(Unchecked Exception)
--> 컴파일러가 관여하지 않으면서 실행 시 예외가 발생할 수 있는 예외
컴파일러가 관여하는 예외
--> 알려진 예외(Checked Exception)으로 구분함.
- 예외 1
package com.coffee.exception;
public class Exception01 {
public static void main(String[] args) {
System.out.println("프로그램 시작");
System.out.println("중간 로직");
int num = 10;
int num2 = 0;
try {
// 예외가 발생할 것 같은 문장
System.out.println(num / num2); // 0으로 나누기 불가 -> 오류 뜸
} catch (Exception e) {
// 혹시 예외가 발생했다면 처리할 문장
System.out.println("예외가 발생했습니다.");
}
int arr[] = new int[] {10,20,30};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
// System.out.println(arr[3]);
try {
System.out.println(arr[3]);
} catch (ArrayIndexOutOfBoundsException e) { // 배열 밖으로 나가는 예외
System.out.println("arr[] 예외 발생");
}
System.out.println("프로그램 끝");
}
}
- 예외 2
package com.coffee.exception;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Exception02 {
public static void main(String[] args) {
FileReader fr = null;
try {
// 예외가 발생할 문장;
fr = new FileReader("temp.text");
} catch (FileNotFoundException e) {
// 예외가 발생했다면 처리할 문장;
e.printStackTrace();
System.out.println("파일이 없습니다.");
} finally {
// 예외 발생과 상관없이 실행할 문장;
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("프로그램 끝");
}
}
- 예외 3
package com.coffee.exception;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Exception03 {
public static void fileOpen() throws IOException {
FileReader fr = null;
// fr = new FileReader("temp.txt"); // 1) 예외 발생
fr = new FileReader("c:\\temp\\employees.sql"); // 실제로 있는 파일
// 파일 읽어보기
while (true) {
int data = fr.read(); // 한 글자씩 char 읽음 (없는 경우 -1)
if(data == -1) {
break;
}
System.out.print((char)data);
}
fr.close();
}
public static void main(String[] args) {
try {
fileOpen(); // 2) 여기로 와서
} catch (FileNotFoundException e) {
e.printStackTrace(); // 3) 여기가 실행됨.
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("main method end");
}
}
- 데이터베이스
package com.coffee.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
// JAVA와 DB 연결하기
public class DB01 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String db = "jdbc:mariadb://-----.com:0000/employees";
String id = "-----";
String pw = "-----";
String sql = "SELECT * FROM departments"; // db, id, pw와 sql로 나눠서 객체화 (클래스 3개)
try {
Class.forName("org.mariadb.jdbc.Driver");
conn = DriverManager.getConnection(db, id, pw); // 1)
pstmt = conn.prepareStatement(sql); // 2) 접속정보를 가지고 sql을 실행
rs = pstmt.executeQuery(); // 3) 실행한 해당 결과는 rs에 담긴다.
while(rs.next()) { // rs 값이 없을 때까지 while 돌아감
String dept_no = rs.getString("dept_no"); // dept_no값을 dept_no에 가져옴
String dept_name = rs.getString("dept_name");
System.out.println(dept_no + " : " + dept_name);
}
} catch (ClassNotFoundException e) {
System.out.println("해당 클래스가 없습니다.");
} catch (SQLException e) {
System.out.println("접속 정보를 확인해주세요.");
} finally {
try {
rs.close(); // 마지막 사용한 것부터 닫아줌.
pstmt.close();
conn.close();
} catch (SQLException e) {
}
}
}
}
- DTO
package com.coffee.db;
// 데이터 전송 객체 (Data Transfer Object)
public class EmployeesDTO { // private로 잠궈야함 (필수)
// 값을 담을 변수
private String dept_no, dept_name; // 다른 class에서 수정 불가 -> getter setter로 접근해야 함.
// getter setter 메소드
public String getDept_no() {
return dept_no;
}
public void setDept_no(String dept_no) {
this.dept_no = dept_no;
}
public String getDept_name() {
return dept_name;
}
public void setDept_name(String dept_name) {
this.dept_name = dept_name;
}
}
- DAO
package com.coffee.db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
// 데이터베이스 접속 객체 (Data Access Object)
public class EmployeesDAO {
DBConnection dbConn = new DBConnection(); // 객체 생성,
public List<EmployeesDTO> selectEmployees() {
List<EmployeesDTO> result = null;
// 접속 정보
Connection con = dbConn.getConnection();
// 객체, sql
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT * FROM employees LIMIT 0, 10";
// 로직
try {
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(); // select문은 이 메소드로 실행함
result = new ArrayList<EmployeesDTO>();
while (rs.next()) {
EmployeesDTO dto = new EmployeesDTO();
dto.setEmp_no(rs.getInt(1));
dto.setFirst_name(rs.getString(2));
dto.setLast_name(rs.getString(3));
dto.setBirth_date(rs.getString(4));
dto.setGender(rs.getString(5));
dto.setHire_date(rs.getString(6));
result.add(dto);
}
} catch (SQLException e) {
}
return result;
}
public List<EmployeesDTO> selectDeptpartments(){
// selectDeptpartments 구동시키면 List<EmployeesDTO> 리스트가 나옴
List<EmployeesDTO> result = null;
// 데이터베이스 접속 정보
Connection conn = dbConn.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
// sql
String sql = "SELECT * FROM departments";
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
// 데이터 만드는 작업
// while(rs.next()) { // rs 값이 없을 때까지 while 돌아감
// String dept_no = rs.getString(1); // DB에서는 1부터 시작! 순서대로하려면 숫자 입력
// String dept_name = rs.getString(2);
// System.out.println(dept_no + " : " + dept_name);
// }
result = new ArrayList<EmployeesDTO>();
while(rs.next()) {
EmployeesDTO dto = new EmployeesDTO(); // 한 줄 추출(튜플) 반복
dto.setDept_no(rs.getString(1));
dto.setDept_name(rs.getString(2));
result.add(dto); // dto를 한 줄 씩 '객체'로 저장 후 while
}
} catch (SQLException e) {
} finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
}
}
return result;
}
}
- 실행되는지 확인하기
package com.coffee.db;
import java.util.List;
// DAO 실행되는지 테스트 (data Access object)
public class Test01 {
public static void main(String[] args) {
EmployeesDAO dao = new EmployeesDAO();
List<EmployeesDTO> result = dao.selectDeptpartments();
for (int i = 0; i < result.size(); i++) {
System.out.print(result.get(i).getDept_no() + " : ");
System.out.println(result.get(i).getDept_name());
}
}
}
'개발 공부 Today I Learned' 카테고리의 다른 글
[국비 27일차 TIL] 자바 데이터베이스 연결, html, css, jsp (1) | 2023.12.28 |
---|---|
[국비 26일차 TIL] JSP 프로젝트 생성, 데이터베이스 연결 (0) | 2023.12.27 |
[국비 24일차 TIL] Collection, List, Set, Map (2) | 2023.12.22 |
[국비 23일차 TIL] Wrapper, List, Set, Map (1) | 2023.12.21 |
[국비 22일차 TIL] 인터페이스, 상속, 메모리 (0) | 2023.12.20 |
댓글