Flaming Soccer ball
SQL

44일차 22.11.22

leo lee 2022. 11. 29.
반응형

SQL - JAVA 

JDBC연동

 

insert문 

package naver.srlee3637.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCInsert {
	
	public static void main(String[] args) {
	
		//insert
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe"; // 주소
		String uid = "hr"; // 계정
		String upw = "hr"; // 비밀번호
		
		String sql = "insert into auth values(seq_auth.nextval, ?, ?)";
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			//connection
			conn = DriverManager.getConnection(url, uid, upw);
			System.out.println(conn);
			
			//statement객체
			pstmt = conn.prepareStatement(sql);
			
			//3. ?값 세팅 - 첫번째부터 1번 순서 (setString, setInt, setDate, setTimestamp 등등)
			pstmt.setString(1, "홍길동");
			pstmt.setString(2, "프로그래머");
			
			
			//4. sql 실행 (select문은 query문장 실행, insert, delete, update문은 update메소드로 실행)
			int result = pstmt.executeUpdate(); // 성공, 실패 결과를 정수로 반환해줌, 이미 위에서 sql을 pstmt에 담아줬기 때문에 매개변수가 없는 메소드를 선택해야 함
			
			if(result == 1) {
				System.out.println("성공");
			} else {
				System.out.println("실패");
			}
			
			
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("Close 에러");
			}
		}
		
		
		
		
		
		
		
	}
	
}

 

select문  

package naver.srlee3637.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBCSelect {

	public static void main(String[] args) {

		String url = "jdbc:oracle:thin:@localhost:1521:xe"; // 주소
		String uid = "hr"; // 계정
		String upw = "hr"; // 비밀번호
		
		String sql = "select * from auth order by auth_id desc";
		
		// 필요한 변수
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null; // 결과 저장 객체
		
		try {
			// 드라이버 로드
			Class.forName("oracle.jdbc.driver.OracleDriver");

			// conn
			conn = DriverManager.getConnection(url, uid, upw);
			
			// stmt
			pstmt = conn.prepareStatement(sql);
			
			// sql구문에 ?가 있으면 채워줘야 함
			
			// sql 실행
			rs = pstmt.executeQuery();
			
			while(rs.next()) { // 다음 row가 있다면 true
				
				// 한 행에 대한 처리(getInt, getString, getDouble, getDate, getTimestamp 등등)
				int auth_id = rs.getInt("auth_id");
				String name = rs.getString("name"); // 컬럼명
				String job = rs.getString("job");
				
				System.out.println("번호:" + auth_id + ", 이름:" + name + ", 직업:" + job);
				
				
			}
			
			
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			try {
				conn.close();
				pstmt.close();
				rs.close();
			} catch (SQLException e) {
				System.out.println("close 에러");
			}
			
		}
		
		
	}

}

select 문 2

 

package naver.srlee3637.jdbc;
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 JDBCSelect2 {

	public static void main(String[] args) {

		/*
		 * 사원 수를 입력받습니다.
		 * 
		 * employees, departments 테이블에서 부서별 사원 수가 입력받은 사원 수보다 큰 데이터를 select
		 * 
		 * 출력할 컬럼은 부서명, 사원수, 부서아이디
		 */
		Scanner scan = new Scanner(System.in);
		
		int num = 0;
		
		try {
			System.out.print("숫자를 입력하세요>");
			num = scan.nextInt();
		} catch (Exception e) {
			scan.nextLine();
		}
		
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String uid = "hr";
		String upw = "hr";
		
		String sql = "select * from (select d.department_name, d.department_id, count(*) as 사원수 "
				+ "from departments d "
				+ "left outer join employees e on e.department_id = d.department_id "
				+ "group by d.department_id, d.department_name order by 사원수)"
				+ " where 사원수 > ?";
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			conn = DriverManager.getConnection(url, uid, upw);
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setInt(1, num);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				String department_name = rs.getString("department_name");
				int department_id = rs.getInt("department_id");
				int employeeNumber = rs.getInt("사원수");
				
				System.out.println("부서명:" + department_name + ", 사원수:" + employeeNumber + ", 부서아이디:" + department_id);
			}
			
			
			
		} catch (Exception e) {
			
		} finally {
			try {
				conn.close();
				pstmt.close();
				rs.close();
				scan.close();
			} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("close 에러");
			}
		}
		
	}

}

 

update문 

package naver.srlee3637.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class JDBCUpdate {

	public static void main(String[] args) {

		// 스캐너로 auth_id, name, job을 입력받아서 해당 auth_id의 name, job을 업데이트하는 구문

		String url = "jdbc:oracle:thin:@localhost:1521:xe"; // 주소
		String uid = "hr"; // 계정
		String upw = "hr"; // 비밀번호

		String sql = "update auth set name = ?, job = ? where auth_id = ?";
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		Scanner scan = new Scanner(System.in);
		
		String name = "";
		String job = "";
		int auth_id = 0;
		
		try {
			System.out.print("이름을 입력하세요>");
			name = scan.next();
			System.out.print("직업을 입력하세요>");
			job = scan.next();
			System.out.print("바꾸고 싶은 행의 auth_id을 숫자로 입력하세요>");
			auth_id = scan.nextInt();
			
		} catch (Exception e) {
			scan.nextLine();
		}
		
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");

			//connection
			conn = DriverManager.getConnection(url, uid, upw);
//			System.out.println(conn);

			//statement객체
			pstmt = conn.prepareStatement(sql);

			//3. ?값 세팅 - 첫번째부터 1번 순서 (setString, setInt, setDate, setTimestamp 등등)
			pstmt.setString(1, name);
			pstmt.setString(2, job);
			pstmt.setInt(3, auth_id);
			

			//4. sql 실행 (select문은 query문장 실행, insert, delete, update문은 update메소드로 실행)
			int result = pstmt.executeUpdate(); // 성공, 실패 결과를 정수로 반환해줌, 이미 위에서 sql을 pstmt에 담아줬기 때문에 매개변수가 없는 메소드를 선택해야 함
			// 답은 1 or 0
			if(result == 1) {
				System.out.println("성공");
			} else {
				System.out.println("실패");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
				pstmt.close();
				scan.close();
			} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("Close 에러");

			}
		}

	}

}

 

package naver.srlee3637.jdbc;

public class AuthVO {
	
	// 특별한 알고리즘을 가진 클래스가 아니라, 조회한 데이터를 저장할 클래스 (1행 데이터를 VO클래스에 담음)
	// 1. 변수는 은닉하고, 테이블이 가지고 있는 멤버변수를 그대로 사용함
	// 2. Getter Setter 사용
	
	private int auth_id;
	private String name;
	private String job;
	
	// 생성자 - 기본 생성자 + 모든 멤버변수를 한번에 저장하는 생성자
	public AuthVO() {
		// ctrl space enter
	}

	public AuthVO(int auth_id, String name, String job) {
		// alt shift s - generate constructor using fields
		
		super();
		this.auth_id = auth_id;
		this.name = name;
		this.job = job;
	}

	
	
	// toString 오버라이드
		@Override
	public String toString() {
		return "AuthVO [auth_id=" + auth_id + ", name=" + name + ", job=" + job + "]";
	}

	// alt shift s - generate getter and setters
	public int getAuth_id() {
		return auth_id;
	}

	public void setAuth_id(int auth_id) {
		this.auth_id = auth_id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}
	
	
	
}
package naver.srlee3637.jdbc;

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 AuthDAO {

	//멤버변수
	private String url = Main.URL; // 주소
	private String uid = Main.UID; // 계정
	private String upw = Main.UPW; // 비밀번호

	//저장 메소드
	public int insertEx(String name, String job) {
		int result = 0;

		String sql = "insert into auth values(seq_auth.nextval, ?, ?)";
		Connection conn = null;
		PreparedStatement pstmt = null;

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");

			//connection
			conn = DriverManager.getConnection(url, uid, upw);
			System.out.println(conn);

			//statement객체
			pstmt = conn.prepareStatement(sql);

			//3. ?값 세팅 - 첫번째부터 1번 순서 (setString, setInt, setDate, setTimestamp 등등)
			pstmt.setString(1, name);
			pstmt.setString(2, job);

			//4. sql 실행 (select문은 query문장 실행, insert, delete, update문은 update메소드로 실행)
			result = pstmt.executeUpdate(); // 성공, 실패 결과를 정수로 반환해줌, 이미 위에서 sql을 pstmt에 담아줬기 때문에 매개변수가 없는 메소드를 선택해야 함


		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				conn.close();
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("Close 에러");
			}
		}



		return result;
	}

	// 조회 메소드
	public ArrayList<AuthVO> selectEx() {

		ArrayList<AuthVO> list = new ArrayList<>();

		String sql = "select * from auth order by auth_id desc";

		// 필요한 변수
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null; // 결과 저장 객체

		try {
			// 드라이버 로드
			Class.forName("oracle.jdbc.driver.OracleDriver");

			// conn
			conn = DriverManager.getConnection(url, uid, upw);

			// stmt
			pstmt = conn.prepareStatement(sql);

			// sql구문에 ?가 있으면 채워줘야 함

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

			while(rs.next()) { // 다음 row가 있다면 true
				
				// 한 행에 대한 처리(getInt, getString, getDouble, getDate, getTimestamp 등등)
				int auth_id = rs.getInt("auth_id");
				String name = rs.getString("name"); // 컬럼명
				String job = rs.getString("job");

				// VO는 한번 돌때마다 하나씩 생성되어야함
				// vo에 행 저장
				// vo를 list에 저장
				AuthVO vo = new AuthVO(auth_id, name, job);
				list.add(vo);
				
				
				
			}


		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			try {
				conn.close();
				pstmt.close();
				rs.close();
			} catch (SQLException e) {
				System.out.println("close 에러");
			}

		}


		return list;
	}

}
package naver.srlee3637.jdbc;

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;

public class Main {
	
	// 상수
	public static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
	public static final String UID = "hr";
	public static final String UPW = "hr";
	

	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);
		
		// DAO 클래스 선언
		AuthDAO authDAO = new AuthDAO();
		boolean bool = true;
		while(bool) {

			try {
				System.out.println("메뉴선택[1. 저장, 2. 조회] \n");


				String menu = scan.next();
				

				switch (menu) {
				case "1":
				case "저장":
					
					System.out.print("이름>");
					String name = scan.next();
					System.out.print("직업>");
					String job = scan.next();
					
					int result = authDAO.insertEx(name, job);
					
					if(result == 1) {
						System.out.println("정상 입력되었습니다");
					} else {
						System.out.println("입력 오류 발생");
					}
					
					break;

				case "2":
					
					ArrayList<AuthVO> list = authDAO.selectEx();
					
					
					for(AuthVO vo : list) {
						if(vo.getAuth_id() > 3){
						System.out.println(vo.toString());
						}
					}
					
					break;

				default:
					System.out.println("프로그램 종료");
					bool = false;
					break;
				}


			} catch (Exception e) {
				e.printStackTrace();
			}



		}

	}

}
반응형

'SQL' 카테고리의 다른 글

MYSQL 설치  (0) 2023.02.03
47일차 22.11.25  (0) 2022.11.29
43일차 22.11.21  (0) 2022.11.21
42일차 22.11.18  (0) 2022.11.18
41일차 22.11.17  (0) 2022.11.17

댓글