오류

[Spring] ERROR: jdbc.sqltiming - 1. PreparedStatement.setNull(3, 1111)java.sql.SQLException: 부적합한 열 유형: 1111

짱코딩러 2022. 10. 22. 22:52

ERROR: jdbc.sqltiming - 1. PreparedStatement.setNull(3, 1111)
java.sql.SQLException: 부적합한 열 유형: 1111

 

검색해보니까 NOT NULL인 컬럼에 NULL이 들어가서라는데 나는 nullable에 null값을 넣은거라고!!

기존에 적은 쿼리=>

	<insert id="insert">
		insert into qna(qnano, subject, content, img, img2, id, pwd)
		values(qna_seq.nextval, #{subject}, #{content}, #{img}, #{img2}, #{id}, #{pwd})
	</insert>

 

nullable칼럼에는 jdbcType=VARCHAR 를 적어주면 된다고 한다.

	<insert id="insert">
		insert into qna(qnano, subject, content, img, img2, id, pwd)
		values(qna_seq.nextval, #{subject}, #{content}, #{img, jdbcType=VARCHAR}, #{img2, jdbcType=VARCHAR}, #{id}, #{pwd})
	</insert>

 

매번 이렇게 적어주기 싫으면 

mybatis-config.xml에 코드를 적어서 한번에 설정해 줄 수 있다

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <configuration>
    <settings> 
        <setting name="cacheEnabled"              value="true"/>     <!-- mybatis cache 사용여부 -->
        <setting name="lazyLoadingEnabled"        value="false"/>     <!-- 지연로딩 사용여부 -->
        <setting name="multipleResultSetsEnabled" value="true"/>     <!-- 한 개의 구문에서 여러 개의 ResultSet을 허용할지 여부 -->
        <setting name="useColumnLabel"            value="true"/>      <!-- 컬럼명 대신 컬럼 라벨을 사용 -->
        <setting name="useGeneratedKeys"          value="false"/>     <!-- 생성키에 대한 JDBC 지원 허용 여부 -->
        <setting name="defaultExecutorType"       value="SIMPLE"/>    <!-- 디폴트 Executor 설정(SIMPLE은 특별히 동작하는 것은 업음) -->
        <setting name="defaultStatementTimeout"   value="3000"/>     <!-- DB 응답 타임아웃 설정 -->
        <setting name="safeRowBoundsEnabled"      value="false" />    <!-- 중첩구문내 RowBound 사용 허용여부 -->
        <setting name="mapUnderscoreToCamelCase"  value="true" />    <!-- 전통적 DB 컴럼명을 JAVA의 Camel표기법으로 자동 매핑 설정 -->
        <setting name="localCacheScope"           value="SESSION" /><!-- 로컬캐시 사용여부(SESSION: 세션을 사용해서 모든쿼리를 캐시) -->
        <setting name="jdbcTypeForNull"           value="OTHER" />    <!-- mybatis로 넘어오는 parameter가 null인 경우, jdbcType을 Setting -->
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" /><!-- 지연로딩을 야기하는 객체의 메소드를 명시 -->
    </settings>
</configuration>

 

 

root-context.xml에도 바꿨다고 알려줘야함!

name="configLocation" 얘 추가해준다.

	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
			<property name="dataSource" ref="dataSource"></property>
			<property name="configLocation" value="classpath:/config/mybatis-config.xml"></property>
	</bean>