DB 연동 프로그램
- db5 패키지
- 메뉴 사용
- db3 패키지의 DAO/DTO를 사용한 Stuent 예제를 다음과 같이 변경
- 작성 클래스(java 파일 5개/db3의 DAO,DTO를 import 해온다고 하면 3개)
- StudentDTO
- StudentDAO
- studentInsert: 메소드 생성(입력받고, DAO insert() 호출)
- StudentSelect: 메소드 (DAO select() 호출)
- StudentMain: switch문 사용해서 메뉴 정리
StudentDTO
package db5;
public class StudentDTO {
private String stdNo;
private String stdName;
private int stdYear;
private String stdAddress;
private String stdBirthday;
private String dptNo;
// 매개변수가 있는 생성자
// 생성자는 StudentDTO 클래스 객체가 생성될 때 자동으로 호출되면서
// 생성자의 매개변수 값을 받음
public StudentDTO(String stdNo, String stdName, int stdYear, String stdAddress, String stdBirthday, String dptNo){
this.stdNo = stdNo;
this.stdName = stdName;
this.stdYear = stdYear;
this.stdAddress = stdAddress;
this.stdBirthday = stdBirthday;
this.dptNo = dptNo;
}
// getter/setter 생성
// get: 멤버변수의 값을 반환해줄 때 사용
// set: 멤버변수에 값을 저장할 때 사용
public String getStdNo() {
return stdNo;
}
public void setStdNo(String stdNo) {
this.stdNo = stdNo;
}
public String getStdName() {
return stdName;
}
public void setStdName(String stdName) {
this.stdName = stdName;
}
public int getStdYear() {
return stdYear;
}
public void setStdYear(int stdYear) {
this.stdYear = stdYear;
}
public String getStdAddress() {
return stdAddress;
}
public void setStdAddress(String stdAddress) {
this.stdAddress = stdAddress;
}
public String getStdBirthday() {
return stdBirthday;
}
public void setStdBirthday(String stdBirthday) {
this.stdBirthday = stdBirthday;
}
public String getDptNo() {
return dptNo;
}
public void setDptNo(String dptNo) {
this.dptNo = dptNo;
}
}
StudentDAO
package db5;
//(1) 생성자에서 DB 연결
//(2) selectStudent() 메서드 : 데이터베이스의 student 테이블에서 select 한 결과 출력
//(3) insertStudent(StudentDTO dto) 메서드
// - main()에서 입력한 student 데이터를 전달 받아서
// - student 테이블에 insert 작업 수행
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
public class StudentDAO {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// 생성자 : 데이터베이스 연결
public StudentDAO() {
try {
//JDBC Driver 클래스의 객체 생성 런타임시 로드
//Class.forName("com.mysql.cj.jdbc.Driver");
// 연결 주소, 사용자 계정, 패스워드 문자열 설정
String url = "jdbc:mysql://localhost:3306/sqldb2?serverTimezone=UTC";
String user = "root";
String pwd = "1234";
// DB 연결하기 위한 객체 생성
// DriverManager를 통해 Connection 객체 생성
// MySQL 서버 연결 : 주소, 사용자 계정, 패스워드 전송
con = DriverManager.getConnection(url, user, pwd);
// Connection 객체가 생성되면 DB 연결 성공
if(con != null) {
System.out.println("DB 연결 성공!");
}
} catch (Exception e) {
System.out.println("오류 발생!");
e.printStackTrace();
}
}
//(2) selectStudent() 메서드
public void selectStudent() {
try {
// sql 직성
String sql = "select * from student order by stdNo";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery(sql);
while(rs.next()) {
String stdNo = rs.getString(1);
String stdName = rs.getString(2);
int stdYear = rs.getInt(3);
String stdAddress = rs.getString(4);
Date stdBirthday = rs.getDate(5);
String dptNo = rs.getString(6);
System.out.format("%-10s\t %-10s\t %-4d %-20s %13s %5s\n",
stdNo, stdName, stdYear, stdAddress, stdBirthday, dptNo);
}
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
}
//(3) insertStudent(StudentDTO dto)
public void insertStudent(StudentDTO dto) {
try {
// sql문 작성
String sql = "insert into student values(?,?,?,?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,dto.getStdNo());
pstmt.setString(2,dto.getStdName());
pstmt.setInt(3,dto.getStdYear());
pstmt.setString(4,dto.getStdAddress());
pstmt.setString(5,dto.getStdBirthday());
pstmt.setString(6,dto.getDptNo());
int result = pstmt.executeUpdate();
if(result > 0) System.out.println("데이터 입력 성공");
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
}
public void updateStudent(StudentDTO dto){
try {
// sql문 작성
String sql = "update student set stdName=?, stdYear=?, stdAddress=?, stdBirthday=?, dptNo=? where stdNo=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,dto.getStdName());
pstmt.setInt(2,dto.getStdYear());
pstmt.setString(3,dto.getStdAddress());
pstmt.setString(4,dto.getStdBirthday());
pstmt.setString(5,dto.getDptNo());
pstmt.setString(6,dto.getStdNo());
int result = pstmt.executeUpdate();
if(result > 0) System.out.println("데이터 수정 성공");
} catch (Exception e) {
System.out.println("오류 발생");
e.printStackTrace();
}
}
public void deleteStudent(StudentDTO dto){
try {
// SQL 작성
String sql = "delete from student where stdNo=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1,dto.getStdNo());
int result = pstmt.executeUpdate();
if(result > 0) System.out.println("데이터 삭제 성공");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
StudentInsert
package db5;
import db3.StudentDAO;
import db3.StudentDTO;
import java.util.Scanner;
public class StudentInsert {
public void studentInsert(){
Scanner scan = new Scanner(System.in);
StudentDAO stdDAO = new StudentDAO();
// 학생 데이터 입력: stdentDAO 클래스의 insertStudetn() 메서드 호출
System.out.println("학생 정보 등록");
System.out.println("-------------------------\n");
System.out.print("학번 입력: ");
String stdNo = scan.nextLine();
System.out.print("이름 입력: ");
String stdName = scan.nextLine();
System.out.print("학년 입력: ");
int stdYear = scan.nextInt();
scan.nextLine();
System.out.print("주소 입력: ");
String stdAddress = scan.nextLine();
System.out.print("생일 입력: ");
String stdBirthday = scan.nextLine();
System.out.print("학과번호 입력: ");
String dptNo = scan.nextLine();
StudentDTO stdDTO = new StudentDTO(stdNo, stdName, stdYear, stdAddress, stdBirthday, dptNo);
stdDAO.insertStudent(stdDTO);
}
}
StudentSelect
package db5;
import db3.StudentDAO;
public class StudentSelect {
public void studentSelect(){
StudentDAO stdDAO = new StudentDAO();
stdDAO.selectStudent();
}
}
StudentMain
package db5;
import java.util.Scanner;
public class StudentMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("------------------------------");
System.out.println("\t 학생 관리 프로그램\t");
System.out.println("------------------------------");
System.out.println("\t 다음 메뉴에서 선택\t");
System.out.println("------------------------------");
System.out.println("1. 학생 등록");
System.out.println("2. 학생 정보 조회");
System.out.println("3. 학생 정보 수정");
System.out.println("4. 학생 정보 삭제");
System.out.println("5. 종료");
System.out.println("------------------------------");
System.out.print("메뉴 번호 입력: ");
int num = scan.nextInt();
scan.nextLine();
switch (num){
case 1:
StudentInsert stdInsert = new StudentInsert();
stdInsert.studentInsert();
break;
case 2:
StudentSelect stdSelect = new StudentSelect();
stdSelect.studentSelect();
break;
default:
break;
}
}
}