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 |