seunghyun Note

DB 연결을 통한 학교 관리 시스템 본문

스터디/JAVA

DB 연결을 통한 학교 관리 시스템

승숭슝현 2024. 1. 11. 20:51
728x90
반응형

오라클이 연동되어 있고 실행되어있다고 가정하고 시작!!!

field에 변수들 선언 

url, driver, user, pwd 를 미리 설정한다. 

driver 는 ojdbc11.jar에 있는 OracleDriver의 경로를 입력한다. 

url 은 'jdbc:oracle:드라이버명:서버:port번호:데이터베이스의 이름' 으로 입력하기

user, pwd는 기존에 oracle에서 만들었던 아이디와 비밀번호를 입력하기.

private Connection con;
private PreparedStatement pstmt;
private ResultSet rs;
private String driver = "oracle.jdbc.driver.OracleDriver";
private String url = "jdbc:oracle:thin:@localhost:1521:XE";
private String user = "java";
private String pwd = "1234";

 


생성자 내에서 드라이버를 실행한다. 

그리고 생성자 내에 getConnection을 만들어 ORACLE DB를 연결

public StudentMain() {
		try {
			Class.forName(driver);
			System.out.println("Driver Loading Success!");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 연동 실패!");
			e.printStackTrace();
		}
	}

	public void getConnection() {
		try {
			con = DriverManager.getConnection(url, user, pwd);
			// System.out.println("DB 연결 성공!!");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

 


메인 class는 생성자를 호출해 변수를 만들고 menu function만 실행한다

	public static void main(String[] args) {
		StudentMain studentMain = new StudentMain();
		studentMain.menu();
	}

menu function 실행 (case에 따른 명령 변경 및 함수 호출)

	public void menu() {

		boolean flag = true;
		while (true) {

			System.out.println("**************");
			System.out.println("관리");
			System.out.println("**************");
			System.out.println("1. 입력");
			System.out.println("2. 검색");
			System.out.println("3. 삭제");
			System.out.println("4. 종료");
			System.out.println("**************");
			System.out.print("번호선택 :");
			int num = sc.nextInt();
			switch (num) {
			case 1:

				insertArticle();
				break;
			case 2:
				selectArticle();
				break;
			case 3:
				deleteArticle();
				break;
			case 4:
				flag = false;
				break;
			}

			if (!flag)
				break;
		}
		System.out.println("종료");
	}

case 1 일 때 데이터 삽입  insertArticle() -> insert된 값을 저장하기 위해 insertData() function으로 넘어감

public void insertArticle() {

		String name = null;
		String value = null;
		int code = 0;

		boolean flag = true;
		while (true) {
			System.out.println("**************");
			System.out.println("1. 학생");
			System.out.println("2. 교수");
			System.out.println("3. 관리자");
			System.out.println("4. 이전메뉴");
			System.out.println("**************");
			System.out.print("번호선택 :");
			int num = sc.nextInt();
			switch (num) {
			case 1:
				System.out.print("이름 입력 : ");
				name = sc.next();
				System.out.print("학번 입력 : ");
				value = sc.next();
				code = 1;

				break;
			case 2:
				System.out.print("이름 입력 : ");
				name = sc.next();
				System.out.print("과목 입력 : ");
				value = sc.next();
				code = 2;
				break;
			case 3:
				System.out.print("이름 입력 : ");
				name = sc.next();
				System.out.print("부서 입력 : ");
				value = sc.next();
				code = 3;
				break;
			case 4:
				flag = false;
				break;
			}

			if (!flag)
				break;

			insertData(name, value, code);
		}

	}

 


case 2 일때 selectArticle() function 호출

-> 이름이 없을 때는 전체 출력 (getDataAll)

-> 이름이 있을 때는 이름 관련 출력(getData)

public void selectArticle() {
		String name = null;
		boolean flag = true;

		while (true) {
			System.out.println("**************");
			System.out.println("1. 이름 검색");
			System.out.println("2. 전체 검색");
			System.out.println("3. 이전메뉴");
			System.out.println("**************");
			System.out.print("번호선택 :");
			int num = sc.nextInt();
			switch (num) {
			case 1:
				System.out.print("이름 입력 : ");
				name = sc.next();
				getData(name);
				break;
			case 2:
				getDataAll();
				break;
			case 3:
				flag = false;
				break;

			}
			if (!flag)
				break;

		}
	}
	public void getData(String name) {
		getConnection();

		try {

			String sql = "SELECT name,value,code FROM school where name like ?";
			pstmt = con.prepareStatement(sql); // 생성
			pstmt.setString(1, "%" + name + "%");

			// 실행
			rs = pstmt.executeQuery();
			while (rs.next()) {
				System.out.println(rs.getString("name") + "\t" + rs.getString("value") + "\t" + rs.getInt("code"));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {

				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (SQLException e) {

				e.printStackTrace();
			}
		}
	}
	public void getDataAll() {
		getConnection();

		String sql;
		try {

			sql = "select * from school";
			pstmt = con.prepareStatement(sql); // 생성

			// 실행
			rs = pstmt.executeQuery();

			while (rs.next()) {
				System.out.println(rs.getString("name") + "\t" + rs.getString("value") + "\t" + rs.getInt("code"));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 생성의 반대로 close 해야한다 . con , pstmt -> pstmt ,con
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

case 3 일때 : deleteArticle() function 호출 - 데이터 삭제

	public void deleteArticle() {
		getConnection();
		System.out.print("이름 입력 : ");
		String name = sc.next();

		try {
			String sql = "DELETE FROM school where name=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, name);
			int su = pstmt.executeUpdate(); // 실행 -> 개수 return
			System.out.println(su + "개의 행이 삭제되었습니다.");
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

최종 코드

package school.dao;

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

public class StudentMain {
	private Connection con;
	private PreparedStatement pstmt;
	private ResultSet rs;
	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String url = "jdbc:oracle:thin:@localhost:1521:XE";
	private String user = "java";
	private String pwd = "1234";

	public StudentMain() {
		try {
			Class.forName(driver);
			System.out.println("Driver Loading Success!");
		} catch (ClassNotFoundException e) {
			System.out.println("드라이버 연동 실패!");
			e.printStackTrace();
		}
	}

	public void getConnection() {
		try {
			con = DriverManager.getConnection(url, user, pwd);
			// System.out.println("DB 연결 성공!!");
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	Scanner sc = new Scanner(System.in);

	public void insertArticle() {

		String name = null;
		String value = null;
		int code = 0;

		boolean flag = true;
		while (true) {
			System.out.println("**************");
			System.out.println("1. 학생");
			System.out.println("2. 교수");
			System.out.println("3. 관리자");
			System.out.println("4. 이전메뉴");
			System.out.println("**************");
			System.out.print("번호선택 :");
			int num = sc.nextInt();
			switch (num) {
			case 1:
				System.out.print("이름 입력 : ");
				name = sc.next();
				System.out.print("학번 입력 : ");
				value = sc.next();
				code = 1;

				break;
			case 2:
				System.out.print("이름 입력 : ");
				name = sc.next();
				System.out.print("과목 입력 : ");
				value = sc.next();
				code = 2;
				break;
			case 3:
				System.out.print("이름 입력 : ");
				name = sc.next();
				System.out.print("부서 입력 : ");
				value = sc.next();
				code = 3;
				break;
			case 4:
				flag = false;
				break;
			}

			if (!flag)
				break;

			insertData(name, value, code);
		}

	}

	public void insertData(String name, String value, int code) {
		getConnection();
		try {
			String sql = "insert into school(name, value, code) values (?,?,?)";
			pstmt = con.prepareStatement(sql);

			pstmt.setString(1, name);
			pstmt.setString(2, value);
			pstmt.setInt(3, code);
			int su = pstmt.executeUpdate();
			System.out.println(su + "개의 행이 만들어졌습니다. ");

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public void getDataAll() {
		getConnection();

		String sql;
		try {

			sql = "select * from school";
			pstmt = con.prepareStatement(sql); // 생성

			// 실행
			rs = pstmt.executeQuery();

			while (rs.next()) {
				System.out.println(rs.getString("name") + "\t" + rs.getString("value") + "\t" + rs.getInt("code"));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 생성의 반대로 close 해야한다 . con , pstmt -> pstmt ,con
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	public void getData(String name) {
		getConnection();

		try {

			String sql = "SELECT name,value,code FROM school where name like ?";
			pstmt = con.prepareStatement(sql); // 생성
			pstmt.setString(1, "%" + name + "%");

			// 실행
			rs = pstmt.executeQuery();
			while (rs.next()) {
				System.out.println(rs.getString("name") + "\t" + rs.getString("value") + "\t" + rs.getInt("code"));
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {

				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (SQLException e) {

				e.printStackTrace();
			}
		}
	}

	public void selectArticle() {
		String name = null;
		boolean flag = true;

		while (true) {
			System.out.println("**************");
			System.out.println("1. 이름 검색");
			System.out.println("2. 전체 검색");
			System.out.println("3. 이전메뉴");
			System.out.println("**************");
			System.out.print("번호선택 :");
			int num = sc.nextInt();
			switch (num) {
			case 1:
				System.out.print("이름 입력 : ");
				name = sc.next();
				getData(name);
				break;
			case 2:
				getDataAll();
				break;
			case 3:
				flag = false;
				break;

			}
			if (!flag)
				break;

		}
	}

	public void deleteArticle() {
		getConnection();
		System.out.print("이름 입력 : ");
		String name = sc.next();

		try {
			String sql = "DELETE FROM school where name=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, name);
			int su = pstmt.executeUpdate(); // 실행 -> 개수 return
			System.out.println(su + "개의 행이 삭제되었습니다.");
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (pstmt != null)
					pstmt.close();
				if (con != null)
					con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

	public void menu() {

		boolean flag = true;
		while (true) {

			System.out.println("**************");
			System.out.println("관리");
			System.out.println("**************");
			System.out.println("1. 입력");
			System.out.println("2. 검색");
			System.out.println("3. 삭제");
			System.out.println("4. 종료");
			System.out.println("**************");
			System.out.print("번호선택 :");
			int num = sc.nextInt();
			switch (num) {
			case 1:

				insertArticle();
				break;
			case 2:
				selectArticle();
				break;
			case 3:
				deleteArticle();
				break;
			case 4:
				flag = false;
				break;
			}

			if (!flag)
				break;
		}
		System.out.println("종료");
	}

	public static void main(String[] args) {
		StudentMain studentMain = new StudentMain();
		studentMain.menu();
	}

}

 

 

 

728x90
반응형

'스터디 > JAVA' 카테고리의 다른 글

JAVA 성적 DTO 만들기  (1) 2024.01.05
JAVA 자동 Calendar 만들기  (3) 2024.01.04