[학교]_10주차_스프링 mySQL DB 쿼리 실습

728x90

Ex 7-4 실습. JdbcTemplate.queryForObject() 실행 

 - query() 결과가 1개일 경우 queryForObject() 메소드를 사용하는 것이 더 효율적.

 - 다만, 이 쿼리 실행결과의 행 개수가 반드시 1이어야 함. 아닐 경우 Exception 발생함

	//ex 7-4 MemberDao 에서 int count() 메소드 추가한 부분
	public int count() {
		Integer count = jdbcTemplate.queryForObject(
				"select count(*) from MEMBER", Integer.class);
		return count;
	}


Ex 7-5 실습. JdbcTemplate.update() 사용 

- MemberDao 에 public void update(Member member) 메소드 구현할 것 

	public void update(Member member) { //Ex7-5 실습에 MemberDao객체에 추가한 메소드 
		jdbcTemplate.update(
				"update MEMBER set NAME = ?, PASSWORD = ? where EMAIL = ?",
				member.getName(), member.getPassword(), member.getEmail());
	}

-Ex7_5 객체의 main() 에서 변경 처리 후 변경 내용 확인

- 데이터베이스 상에서도 변경 내용 확인


Ex 7-6 실습. DB 테이블에 update 처리하기

- MemberDao 클래스에 public void insert(final Member member) 메소드 추가

-main() 안에서 테이블에 업데이트할 Member 객체를 생성한 뒤, insert(member) 처리할 것

	//Ex 7-6 실습 추가 메소드
	public void insert(Member member) {
		KeyHolder keyHolder = new GeneratedKeyHolder();
		jdbcTemplate.update(new PreparedStatementCreator() {
			@Override
			public PreparedStatement createPreparedStatement(Connection con)
					throws SQLException {
				// 파라미터로 전달받은 Connection을 이용해서 PreparedStatement 생성
				PreparedStatement pstmt = con.prepareStatement(
						"insert into MEMBER (EMAIL, PASSWORD, NAME, REGDATE) " +
						"values (?, ?, ?, ?)",
						new String[] { "ID" });
				// 인덱스 파라미터 값 설정
				pstmt.setString(1, member.getEmail());
				pstmt.setString(2, member.getPassword());
				pstmt.setString(3, member.getName());
				pstmt.setTimestamp(4,
						Timestamp.valueOf(member.getRegisterDateTime()));
				// 생성한 PreparedStatement 객체 리턴
				return pstmt;
			}
		}, keyHolder);
		Number keyValue = keyHolder.getKey();
		member.setId(keyValue.longValue());
	}

- main() 에서 Member 객체 추가한 뒤, 변형된 Id = 3 으로 출력된다.

-실제로 데이터베이스에도 Member 가 하나 더 추가된 것을 확인할 수 있다.

728x90