negno
개발Log
negno
전체 방문자
오늘
어제
  • 분류 전체보기
    • Project
      • Mini_Project
      • PTSD_Project
    • Algorithm
      • Elice
      • JavaFestival
    • BACK-END
      • C Programming
      • JAVA
      • JSP Servlet
      • Python
      • Spring
      • Machine Learning
    • FRONT-END
      • HTML CSS
      • JavaScript
    • Application
      • Android
    • DataBase
      • Oracle
      • MySql
    • IoT
      • Arduino
      • Raspberry pi

티스토리

hELLO · Designed By 정상우.
negno

개발Log

Java JDBC 예제
BACK-END/JAVA

Java JDBC 예제

2022. 7. 19. 11:32

EX_01. 학생 관리 프로그램

1-1. Model

1-1-1. VO

package Model;

public class Student {

	// 데이터 값을 저장하게끔 설계하는 클래스
	// VO - Value Object - setter 메소드가 없음
	// DTO - Data Transfer Object - setter 메소드가 있음
	
	
	private int stdnum;
	private int age;
	private String tel;
	private String email;
	private String name;
	private String updateName;
	/**
	 * @param stdnum
	 * @param name
	 * @param age
	 * @param tel
	 * @param email
	 */
	public Student(int stdnum, String name, int age, String tel, String email) {
		super();
		this.stdnum = stdnum;
		this.name = name;
		this.age = age;
		this.tel = tel;
		this.email = email;
	}
	/**
	 * @param name
	 */
	public Student(String name) {
		super();
		this.name = name;
	}
	//overloading
	public Student(String name, int age, String tel, String email) {
		this.name = name;
		this.age = age;
		this.tel = tel;
		this.email = email;
	}
	public int getStdnum() {
		return stdnum;
	}
	public int getAge() {
		return age;
	}
	public String getTel() {
		return tel;
	}
	public String getEmail() {
		return email;
	}
	public String getName() {
		return name;
	}
	public String getupdateName() {
		return updateName;
	}
	/**
	 * @param name
	 */
	public Student(int stdnum, String updateName) {
		super();
		this.stdnum = stdnum;
		this.updateName = updateName;
	}
	public String getUpdateName() {
		return updateName;
	}
	/**
	 * 
	 */
	public Student(int stdnum) {
		this.stdnum = stdnum;
		
	}
	public int getInt(int stdnum2) {
		// TODO Auto-generated method stub
		return 0;
	}
	
}

 

1-1-2. DAO

package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class StudentDAO {
	// data access object
	/*
	 * JDBC 코드를 전부 관리한느 도구역할! data access object
	 */

	// 1. 필드
	private Connection conn = null;
	private PreparedStatement psmt = null;
	private ResultSet rs = null;

	public void getConn() {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			String url = "jdbc:oracle:thin:@localhost:1521/xe";
			String user = "hr";
			String password = "hr";
			conn = DriverManager.getConnection(url, user, password);

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// getClose : 자원을 반납하는 메서드 만들고 사용하기
	// rs ---> psmt ---> conn
	// 이미 사용하고 있는지 아닌지에 대해서 if문으로 판단하기때문에 문제가 없습니다.
	public void getClose() {
		try {
			if (rs != null) {
				rs.close();
			}
			if (psmt != null) {
				psmt.close();
			}
			if (conn != null)
				// 자원을 반납하는 메소드
				conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("자원반납시 생긴 오류!");
		}
	}

	// 2. 메소드
	public int insert(Student s) {
		int row = 0;

		try {
			getConn();

			String sql = "insert into student values(stdnum.nextval,?,?,?,?)";

			psmt = conn.prepareStatement(sql);
			psmt.setString(1, s.getName());
			psmt.setInt(2, s.getAge());
			psmt.setString(3, s.getTel());
			psmt.setString(4, s.getEmail());
			row = psmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			getClose();
		}
		return row;
	}

	public int delete(Student d_s) {
		int row = 0;
		try {
			getConn();

			String sql = "delete from student where name=?";

			psmt = conn.prepareStatement(sql);
			psmt.setString(1, d_s.getName());
			row = psmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			getClose();
		}
		return row;
	}

	public int update(Student u_s) {
		int row = 0;
		try {
			getConn();

			String sql = "update student set name = ? where stdnum = ?";

			psmt = conn.prepareStatement(sql);
			psmt.setString(1, u_s.getupdateName());
			psmt.setInt(2, u_s.getStdnum());

			row = psmt.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			getClose();
		}
		return row;
	}

	public ArrayList<Student> all_select() {
		ResultSet rs = null;
		// 전체 학생정보를 저장할 ArrayList!!
		// 학생이 전부 몇명인지 명확하게 모르기 때문에 가변배열 사용
		ArrayList<Student> list = new ArrayList<Student>();
		try {
			getConn();
			String sql = "select * from student";
			psmt = conn.prepareStatement(sql);
			rs = psmt.executeQuery();
			while (rs.next()) {
				String name = rs.getString("name");
				int age = rs.getInt("age");
				String tel = rs.getString("tel");
				String email = rs.getString("email");

				// 리턴을 시켜주기 위해서 하나의 데이터로 묶기
				Student s = new Student(name, age, tel, email);
				list.add(s);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("데이터베이스 연결 실패");
		} finally {
			getClose();
		}
		return list;
	}

	// 내가 돌려받아야 할 값 --> name, age, phone, email, stdnum -->Student (vo)자료형
	// 메소드명 selectOne();
	// return -> Student가 가져온 값을 리턴
	public Student selectOne(Student s_o) {
		ResultSet rs = null;
		Student st = null;
		ArrayList<Student> list = new ArrayList<Student>();
		try {
			getConn();
			String sql = "select * from student where stdnum = ?";
			psmt = conn.prepareStatement(sql);
			psmt.setInt(1, s_o.getStdnum());
			rs = psmt.executeQuery();
			
			if(rs.next()) {
				String name = rs.getString("name");
				int age = rs.getInt("age");
				String tel = rs.getString("tel");
				String email = rs.getString("email");

				// 리턴을 시켜주기 위해서 하나의 데이터로 묶기
				//Student s = new Student(name, age, tel, email);
				st = new Student(name, age, tel, email);
				//list.add(s);
			}
		}
		catch (SQLException e) {
			e.printStackTrace();
			System.out.println("데이터베이스 연결 실패");
		}
		finally {
			getClose();
		}
		return st;
	}

}

 

1-2. Controller

1-2-1. Controller

package controller;

import java.util.ArrayList;

import Model.Student;
import Model.StudentDAO;

public class Controller {

	Student s = null; // model
	StudentDAO dao = new StudentDAO(); // controller
	// Main(사용자에게 입력받음) --> Controller -> StudentDAO(Data base 와 연결되어있는부분) -->
	// Controller --> View
	// view : name, age, tel, email

	public void insert(Student s) {
		// return row ---> int
		int row = dao.insert(s);
		
		if (row > 0) {
			System.out.println("데이터 추가 성공!");
		} else {
			System.out.println("데이터 추가 실패!");
		}

	}
	public void delete(Student s) {
		
		int row = dao.delete(s);
		if (row > 0) {
			System.out.println("데이터 삭제 성공!");
		} else {
			System.out.println("데이터 삭제 실패!");
		}
	}
	
	public void update(Student u_s) {
		int row = dao.update(u_s);
		
		if (row > 0) {
			System.out.println("데이터 업데이트 성공!");
		} else {
			System.out.println("데이터 업데이트 실패!");
		}
	}
	
	public void selectAll() {
		ArrayList<Student> list = dao.all_select();
		for(Student s : list) {
			System.out.println(s.getName() + "\t" + s.getAge() + "\t" + s.getTel() + "\t" + s.getEmail());
		}
	}
	/*
	 * public void selectOne(int stdnum) {
	 * Student std= dao.selectOne(stdnum);
	 * System.out.println(s1.getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail()); 
 	 */
	public void selectOne(Student s_o) {
		Student s1 = dao.selectOne(s_o);
		System.out.println(s1.getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail());
	}

}

1-3. View

1-3-1. Main

package View;

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.Scanner;

import controller.Controller;
import Model.Student;
import Model.StudentDAO;

public class Main {

	private static final Student Student = null;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		String name = "";
		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		StudentDAO dao = new StudentDAO();
		int row = 0;
		String email = "";
		int age = 0;
		int input = 0;
		String delete_name = "";
		String updateName = "";
		int stdnum = 0;
		Controller c = new Controller();
		while (input!=6) {
			System.out.print("[1]학생추가 [2]학생삭제 [3]학생수정 [4]전체학생조회 [5]특정학생조회 [6]종료 >> ");
			input = sc.nextInt();
			switch (input) {
			
			case 1:
				System.out.println("========학생추가========");
				System.out.println("학생정보를 추가합니다");
				System.out.print("이름 : ");
				name = sc.next();
				System.out.print("나이 : ");
				age = sc.nextInt();
				System.out.print("번호 : ");
				String phone = sc.next();
				System.out.print("email : ");
				email = sc.next();

				// 데이터베이스 연결 관리해주는 도구 생성
				// DAO로 전송해줄 자료형태를 만들기
				Student s = new Student(name, age, phone, email);
				//row = dao.insert(s);
				c = new Controller();
				c.insert(s);
				
				/*if (row > 0) {
					System.out.println("데이터 추가 성공!");
				} else {
					System.out.println("데이터 추가 실패!");
				}*/
				break;
				
			case 2:
				System.out.println("========학생삭제========");
				System.out.print("이름 입력 >> ");
				delete_name = sc.next();
				Student d_s = new Student(delete_name);
				
				c.delete(d_s);
				
				break;

			case 3:
				System.out.println("========학생수정========");
				System.out.print("수정할 학생번호 입력해주세요 >>");
				stdnum = sc.nextInt();
				System.out.println("어떤 이름으로 수정 ? >>");
				updateName = sc.next();
				Student u_s = new Student(stdnum, updateName);
				c.update(u_s);
				
				break;

			case 4:
				System.out.println("========전체학생조회========");
				c.selectAll();
				
				//list안에 있는 모든 데이터 출력하기
				// for-each문 --> 배열안에 들어있는 데이터의 개수만큼 반복시켜주는 구문
				// 인덱스 순차적으로 데이터에 접근해서 하나씩 하나씩 뽑아낸 데이터를
				// s라는 공간에 담아주는 형태로 반복문이 진행!
				//for(Student s1:list) {
				//	System.out.println(s1.getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail());
				//}
				break;
				
			case 5:
				System.out.println("========특정학생조회========");
				// 1.학생번호 입력받기
				System.out.println("조회하고 싶은 학생번호 입력 >> ");
				stdnum = sc.nextInt();
				Student s_o = new Student(stdnum);
				c.selectOne(s_o);
				//stdnum을 dao에 보내서 검색결과를 받아오게 만들자
				// dao.selectOne을 호출할때에는 std(name, age, tel, email)을 가지고만 왔다.
				
				//ArrayList<Student> list2 = dao.selectOne(s_o);
				//Student s1 = dao.selectOne(s_o);
				//System.out.println(list2getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail());
				//System.out.println(s1.getName() + "\t" + s1.getAge() + "\t" + s1.getTel() + "\t" + s1.getEmail());
				
				break;
			case 6:
				System.out.println("========종료========");
				break;
			default:
				System.out.println("========잘못된 숫자 입력!!!!=========");
				break;
			}
		}
	}
}

'BACK-END > JAVA' 카테고리의 다른 글

Java 상속 예제  (0) 2022.07.19
Java ArrayList 예제  (0) 2022.07.19
Java 객체 배열 예제  (0) 2022.07.19
JAVA OOP 예제  (0) 2022.07.13
JAVA 메소드 예제  (0) 2022.07.13
    negno
    negno

    티스토리툴바