본문 바로가기
데이터베이스/환경설정 및 개발

Java를 사용하여 Insert, Select, Update, Delete SQL사용하기

by 코이킹 2023. 7. 23.
반응형

DB에 데이터 CRUD처리를 위한 Insert, Select, Update, Delete SQL을 Java - JDBC를 통해 사용하는 예제를 정리하려한다. 

작업환경 및 전제조건

- Windows10 Home의 wsl에서 도커환경을 구축

- DBeaver설치(DB접속확인용)

- https://koiking.tistory.com/121 이 포스트대로 DB설치가 끝나있을 것

 

1. Insert 

PreparedStatement ps;
ResultSet rs;
        employee_id++;
        String firstName = "koiking";
        String lastName = "testName";
        String email = "koiking@gmail.com";
        String phoneNumber = "000-1234-1234";
        String jobId = "IT_PROG";

        LocalDateTime hire_date = LocalDateTime.now();
        String parseLocalDateTime = hire_date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        sql = String.format("INSERT INTO EMPLOYEES "
        		+ "(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, "
        		+ "EMAIL, PHONE_NUMBER, HIRE_DATE, "
        		+ "JOB_ID, SALARY, COMMISSION_PCT, "
        		+ "MANAGER_ID, DEPARTMENT_ID"
        		+ ") "
        		+ "VALUES"
        		+ " (?, '%s', '%s',"  // ? 은 PreparedStatement의 set 메서드를 통해서 파라미터 설정가능함
        		+ " '%s', '%s', '%s',"
        		+ " '%s', 12345, null,"
        		+ " 103, 60)",
        		firstName, lastName, email, phoneNumber, parseLocalDateTime, jobId);
  try {
            con = DriverManager.getConnection(url, username, password);
            
            ps = con.prepareStatement(sql);
            ps.setInt(1, employee_id);
            int res = ps.executeUpdate();
            if (res > 0) {
            	System.out.println("Insert Success : " + sql);
            }

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

- sql문자열을 완성한 상태에서도 넣을 수 있지만, PreparedStatement의 Set메서드를 이용해서 파라미터 설정이 가능하다. Set메서드를 이용해서 파라미터 설정하기 위해선 파라미터를 ?마크로 해두고, executeUpdate메서드의 실행전에 Set메서드를 사용하면 됨.

- Insert에 성공하면 결과로 1이 반환되므로, 결과값을 통해 Insert성공여부를 확인가능함.

 

2. Select Count

        int employee_id = 0;
        String sql = "SELECT MAX(EMPLOYEE_ID) AS MAX FROM EMPLOYEES";
        try {
            ps = con.prepareStatement(sql);
            rs = ps.executeQuery();

            if (rs.next()) {
                employee_id = rs.getInt("MAX");
                // employee_id = rs.getInt(1);
                System.out.println("Total MAX: " + employee_id);
            }

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

- 단일 숫자를 반환하는 COUNT, MAX, MIN, AVG, SUM등의 집계함수의 결과는 ResultSet의 getInt로 받아온다. 

- AS에 지정한 별명또는 , 인덱스번호 1을 지정해서 가져온다. 

 

3. Select 

sql = "SELECT e.* FROM EMPLOYEES e WHERE EMPLOYEE_ID = "+employee_id;

try {
     ps = con.prepareStatement(sql);
     rs = ps.executeQuery();
	 selectTest(rs);

} catch (Exception e) { e.printStackTrace(); }
        
public static void selectTest(ResultSet rs) throws SQLException, Exception {
		while (rs.next()) {
			int employeeId = rs.getInt("EMPLOYEE_ID");
			String firstName = rs.getString("FIRST_NAME");
			String lastName = rs.getString("LAST_NAME");
			String email = rs.getString("EMAIL");
			Date temp = rs.getDate("HIRE_DATE");
			String jobId = rs.getString("JOB_ID");
			int salary = rs.getInt("SALARY");

			// LocalDateTime hireDate = temp.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); -> 이건 안됬음
			LocalDateTime hireDate = Instant.ofEpochMilli(temp.getTime()).atZone(ZoneId.systemDefault()).toLocalDateTime();
			String hireDateStr = hireDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

			System.out.printf("%s, %s, %s, %s, %s, %s, %s \n", employeeId, firstName, lastName, email, hireDateStr, jobId, salary);
		}
	}

- ResultSet으로 부터 데이터를 한행씩 가져오는데 이때 각 행의 데이터 타입에 맞는 get메서드를 사용해서 가져와야한다. 

 

4. Update

        lastName = "updatedtestName";
        int salary = 11113;
        LocalDateTime updatedHireDate =  hire_date.plusMonths(2);
        parseLocalDateTime = updatedHireDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        sql = String.format("UPDATE EMPLOYEES e SET LAST_NAME = '%s', "
        		+ "HIRE_DATE = '%s', "
        		+ "SALARY = %s"
        		+ " WHERE EMPLOYEE_ID = %s", lastName, parseLocalDateTime, salary, employee_id);
        System.out.println("Update SQL : " + sql);
        try {
            ps = con.prepareStatement(sql);
            int res = ps.executeUpdate();

            if (res > 0) {
            	System.out.println("Update Success : " + sql);
            }

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

- Insert와 거의 다르지 않다. update의 결과를 숫자로 리턴하므로, 결과값으로 갱신 성공여부를 확인 가능하다. 

 

5. Delete

        sql = String.format("DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID=%s", employee_id);
        System.out.println("DELETE SQL : " + sql);
        try {
            ps = con.prepareStatement(sql);
            int res = ps.executeUpdate();

            if (res > 0) {
            	System.out.println("Delete Success : " + sql);
            }

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

- Insert, update와 거의 다르지 않다. delete의 결과를 숫자로 리턴하므로, 결과값으로 삭제 성공여부를 확인 가능하다. 

※ 소스코드 

https://github.com/leeyoungseung/database-ex/commit/b592d9eb42a1d8326bdab948c67e74af6dbef927

 

 

 

반응형

'데이터베이스 > 환경설정 및 개발' 카테고리의 다른 글

Python을 사용하여 DB연결  (0) 2023.07.12
Java를 사용하여 DB연결  (0) 2023.07.10
도커를 사용하여 DB설치  (0) 2023.07.09

댓글