· LANGUAGE/└ Java

[ Java / DB ] DB에 대상이 없는 경우

감자도리22 2024. 1. 23. 19:14

환경 : Eclipse / DBeaver

 

(추가) JDBC 클래스 파일

package jdbc.util;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class JdbcHelper {
	//JdbcTemplate을 생성하는 메소드 구현
	// = 아무나 객체 없이 접근 가능하게 구현
	public static JdbcTemplate getJdbcTemplate() {
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setUsername("kh13");
		dataSource.setPassword("kh13");
		dataSource.setDriverClassName("oracle.jdbc.OracleDriver");
		dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
		
		JdbcTemplate jdbcTemplate = new JdbcTemplate();
		jdbcTemplate.setDataSource(dataSource);
		
		return jdbcTemplate;
	}
	
}

 

[전체 코드]

import org.springframework.jdbc.core.JdbcTemplate;

import jdbc.util.JdbcHelper;

public class Practice {
	public static void main(String[] args) {
		//사번을 이용해서 사원명, 부서, 입사일, 급여를 변경하도록 구현
		
		//데이터
		int empNo = 22;  //없는 사번
		String empName = "바꾼이름";
		String empDept = "바꾼부서";
		String empDate = "2024-01-01";
		int empSal = 0;
		
		//처리
		JdbcTemplate jdbcTemplate = JdbcHelper.getJdbcTemplate();
		
		String sql = "update emp "
					+ "set emp_name=?, emp_dept=?, emp_date=?, emp_sal=? "
					+ "where emp_no = ?";
		Object[] data = {empName, empDept, empDate, empSal, empNo};

		//update 메소드는 반환형이 int이며, 적용된 행의 개수가 반환된다
		int count = jdbcTemplate.update(sql, data);
		//System.out.println("count = " + count);
		
		//출력
		if(count > 0) 
			System.out.println("사원 정보 변경 완료");
		else 
			System.out.println("존재하지 않는 사원번호");
	}
}

 

 데이터베이스에 값을 변경(Update)할 때 없는 번호의 값을 변경하려고 시도한다면 에러없이 적용된다는 결함이 있다. 따라서 try-catch문 등을 사용하여 없는 값의 데이터 수정에 대한 코드를 작성하기 어렵다. 

 하지만, 데이터베이스에서 데이터를 삽입할 때 아래와 같은 정보가 뜨게 된다.

한 줄이 변경되었다는 정보

이처럼 업데이트된 행의 수가 0인 경우에는 변경된 값이 없다는 뜻이 된다. 따라서 이를 활용하여 번호의 존재여부를 분류할 수 있다. 

 

해당하는 코드는 아래와 같다. 

	//update 메소드는 반환형이 int이며, 적용된 행의 개수가 반환된다
	int count = jdbcTemplate.update(sql, data);
	//System.out.println("count = " + count);
		
	//출력
	if(count > 0) 
		System.out.println("사원 정보 변경 완료");
	else 
		System.out.println("존재하지 않는 사원번호");

 

 update() 메소드의 경우 반환형이 int형이다. 즉, 적용된 행의 개수가 반환된다. 따라서 수정할 값의 반환 값을 int 형 변수에 넣어준 후, 그 값이 0이라면 존재하지 않는 번호가 된다. 

 

 

 

 

 

 

 

 

 

 

개인 공부 기록용입니다:)

728x90