2012-05-24 3 views
4

나는 jdbcTemplate.update(String sql, Object[] args) 봄을 사용하여 Oracle 데이터베이스에서 준비된 삽입 문을 실행하고 있습니다. 개체 중 하나의 값은 'Y'를 포함하는 캐릭터 오브젝트이고, 목표 컬럼 (1)의 입력 CHAR이지만, I는오류 오라클 CHAR (1) 열에 Java 문자 개체 값 삽입

java.sql.SQLException: Invalid column type 

예외를 수신하고있다.

전방 및 전방을 디버깅했습니다. 문제를 일으키는이 특정 객체가 의심의 여지가 없습니다. 이 문자 객체가 생략되면 예상대로 삽입이 실행됩니다.

또한 sql과 Object [] 값을 출력하고 sql을 sql 개발자에게 복사하고 값 자리 표시 자 (?'s)을 개체의 실제 값으로 대체하면 삽입이 올바르게 작동합니다.

는 SQL (유죄를 보호하기 위해 난독 화) :

INSERT INTO SCHEMA.TABLE(NUMBER_COLUMN,VARCHAR_COLUMN,DATE_COLUMN,CHAR_COLUMN) VALUES (?,?,?,?); 

개체 값 :

values[0] = [123] 
values[1] = [Some String] 
values[2] = [2012-04-19] 
values[3] = [Y] 

조합은 SQL 개발자에 수동으로 실행하고는 잘 작동합니다 :

INSERT INTO SCHEMA.TABLE(NUMBER_COLUMN,VARCHAR_COLUMN,DATE_COLUMN,CHAR_COLUMN) VALUES (123,'Some String','19-Apr-2012','Y'); 

prepared statement sql 자체는 null이 아닌 인스턴스 변수를 기반으로 동적으로 생성됩니다. le 객체 (데이터베이스가 기본값 생성을 처리하기를 원함)를 사용하기 때문에 SQL 또는 삽입 루틴을 다시 작성한다는 응답을받을 수 없습니다.

누구든지이 문제가 발생하여 어떤 일이 벌어지고 어떻게 해결할 수 있는지 설명 할 수 있습니까? 불행히도 문자 객체를 CHAR (1) 필드에 삽입 할 수 없다는 것은 당황 스럽다. 어떤 도움이라도 대단히 감사 할 것입니다.

감사합니다, 오랜 럴커를 처음은 포스터

답변

2

문자 값을 취하는 PreparedStatement.setXxx는()이 없으며, 오라클 문서는 모든 JDBC 문자 유형은 자바 문자열에 매핑하는 것을 말한다. 또한 char 또는 Character에서 JDBC 유형으로의 매핑을 포함하지 않는 http://docs.oracle.com/javase/1.3/docs/guide/jdbc/getstart/mapping.html#1039196을 참조하십시오.

값을 String으로 변환해야합니다.