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 |
댓글