JDBC 코드에 오류 나는데 어떻게 코드를 수정해야 하나요? 0 1 1,101

by 나루호도 [DB 기타] SQL JDBC [2020.12.05 13:29:33]


다음과 같이 테이블과 프로시저를 생성했습니다.

create table customer(
c_no VARCHAR2(14) NOT NULL,
c_name VARCHAR2(20) NOT NULL,
c_addr VARCHAR2(60),
c_phone VARCHAR2(16),
c_dist CHAR(2)
);

create or replace procedure input_customer(
c_no in varchar2,
c_name in varchar2,
c_addr in varchar2,
c_phone in varchar2,
c_dist in char
)
as
begin
	insert into customer(c_no, c_name, c_addr, c_phone, c_dist)
	values(c_no, c_name, c_addr, c_phone, c_dist);
end;




위의 테이블과 프로시저를 바탕으로 자바 코드를 아래와 같이 작성했습니다.

import java.sql.*;

public class CallableStatement {

    public static void main(String[] argv)
    {
        Connection conn;

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");

            conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@117.17.198.43:1531:ORCL",
                    "CSDB202", "CSDB202");
            java.sql.CallableStatement cstmt;
            cstmt = conn.prepareCall("{call input_customer(?, ?, ?, ?, ?)}");

            cstmt.setString(1, "871024-1213528");
            cstmt.setString(2, "김윤성");
            cstmt.setString(3, "서울시 송파구");
            cstmt.setString(4, "02-712-4567");
            cstmt.setString(5, "0");
            cstmt.executeUpdate();

            String c_no = cstmt.getString(1); // 오류가 나는 곳
            String c_name = cstmt.getString(2);
            String c_addr = cstmt.getString(3);
            String c_phone = cstmt.getString(4);
            String c_dist = cstmt.getString(5);


            System.out.println("NO : " + c_no);
            System.out.println("NAME : " + c_name);
            System.out.println("ADDR : " + c_addr);
            System.out.println("PHONE : " + c_phone);
            System.out.println("DIST : " + c_dist);

            cstmt.close();
            conn.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}


위의 자바 코드를 인텔리제이(IDE)에서 실행하면

java.sql.SQLException: 부적합한 열 인덱스

라는 오류가 나오는데,
getString() 안의 인자값을 파라미터 인덱스가 아닌 파라미터 값을 다음과 같이 넣어줘도
동일한 오류가 발생하네요.

String c_no = cstmt.getString("c_no");
String c_name = cstmt.getString("c_name");
String c_addr = cstmt.getString("c_addr");
String c_phone = cstmt.getString("c_phone");
String c_dist = cstmt.getInt("c_dist");


정상실행이 되게 하려면 코드를 어떻게 수정해야 하나요?
도움이 절실합니다.

 

by 마농 [2020.12.07 09:09:39]

getString 은 SELECT 구문 실행시 결과값을 받아오는 구문이므로
INSERT 구문에서는 getString 이 필요 없습니다.
INSERT 구문에서는 setString 만 있으면 됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입