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

TAEHYUN LEE님의 프로필 이미지
TAEHYUN LEE

작성한 질문수

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

순수 JDBC

MySql 대신 오라클로 연동 시 오류

작성

·

761

0


[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

순수JDBC 강의 15분~16분 실행(등록) 시 오류 발생.

(이름 입력 - 등록 - 에러발생)

*DB에는 insert 되어있음

**페이지 에러명 : Whitelabel Error Page , (type=Internal Server Error, status=500).

 

영한님 강의에서는 id를 Long 타입으로 하시고

create table을 bigint로 하셨어요. 저는 오라클DB를 쓰기 때문에

Long 타입을 모두 int 타입으로 변환하였고,

create table 또한 id필드를 number로 생성하였습니다.

회원가입(등록) 시, DB에 insert는 되나

에러가 뜨면서 콘솔창에 아래와 같은 오류가 뜹니다.

java.sql.SQLException: 부적합한 열 유형: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessor

 

오류발생 지점을 보면,

@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);
        pstmt.setString(1, member.getName());
        pstmt.executeUpdate();
        rs = pstmt.getGeneratedKeys();
        if (rs.next()) {
            member.setId(rs.getInt(1));
        } else {
            throw new SQLException("id 조회 실패");
        }
        return member;
    } catch (Exception e) {
        throw new IllegalStateException(e);
    } finally {
        close(conn, pstmt, rs);
    }
member.setId(rs.getInt(1));

위 행에서 오류가 발생하는 것으로 확인됩니다.

 

DB에는 insert 되어있는데

무엇이 문제인지 모르겠습니다.

 

 

답변 1

1

안녕하세요. TAEHYUN LEE님, 공식 서포터즈 David입니다.

int 타입으로 Long을 받지 못해서 발생한 오류로 보여집니다.

BigInt와 int의 범위가 다릅니다.

오라클에서 지원하는 데이터 타입을 살펴보시고, Long 타입을 받을 수 있는 타입으로 필드를 정의해 주세요:)

감사합니다.

TAEHYUN LEE님의 프로필 이미지
TAEHYUN LEE

작성한 질문수

질문하기