인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

순수 JDBC

JdbcMemberRepository 에러 질문

작성

·

622

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.jdbc.datasource.DataSourceUtils;
import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class JdbcMemberRepository implements MemberRepository {
private final DataSource dataSource;

public JdbcMemberRepository(DataSource dataSource) {
this.dataSource = dataSource;
}

@Override
public Member save(Member member) {
String sql = "insert into member(name) values(?)";

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null; // 결과를 받는것이다.

try {
conn = getConnection();
pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); // DB에 인서트를 할 때 이것을 써야 값을 얻는다.

pstmt.setString(1, member.getName());

pstmt.executeUpdate();
rs = pstmt.getGeneratedKeys(); // 자동으로 들어가는 ID수를 꺼내준다.

if (rs.next()) {
member.setId(rs.getLong(1));
} else {
throw new SQLException("id 조회 실패");
}
return member;
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs);
}
}
@Override
public Optional<Member> findById(Long id) {
String sql = "select * from member where id = ?";

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setLong(1, id);

rs = pstmt.executeQuery();

if(rs.next()) {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return Optional.of(member);
} else {
return Optional.empty();
}
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs);
}
}
@Override
public List<Member> findAll() {
String sql = "select * from member";

Connection conn = null;
PreparedStatement pstmt = null;

ResultSet rs = null;

try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
List<Member> members = new ArrayList<>();
while(rs.next()) {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
members.add(member);
}
return members;
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs);
}
}
@Override
public Optional<Member> findByName(String name) {
String sql = "select * from member where name = ?";

Connection conn = null;
PreparedStatement pstmt = null;

ResultSet rs = null;

try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
rs = pstmt.executeQuery();
if(rs.next()) {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return Optional.of(member);
}
return Optional.empty();
} catch (Exception e) {
throw new IllegalStateException(e);
} finally {
close(conn, pstmt, rs);
}
}
private Connection getConnection() {
return DataSourceUtils.getConnection(dataSource);
}
private void close(Connection conn, PreparedStatement pstmt, ResultSet rs)
{
try {
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (pstmt != null) {
pstmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
close(conn);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private void close(Connection conn) throws SQLException {
DataSourceUtils.releaseConnection(conn, dataSource);
}
}
템플릿을 그대로 복사를 한 후 SpringConfig까지 진행해서 실행 후 localhost8080 에 들어갔는데 회원 목록을 누르게 되면 화이트라벨 에러가 뜨고 hikaripool 에러가 뜹니다. 어디서 에러가 났는지 찾기 어려워서 질문 드려요

답변 2

0

안녕하세요. 공식 서포터즈 OMG입니다.

질문 게시글을 삭제하신 것으로 확인됩니다.

추가적으로 궁금한 사항이 있으신 경우 글을 새로 작성해주세요.

감사합니다.

0

이런 에러가 뜹니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기