시스템아 미안해

mariaDB decimal에 빈 값 넣기(jsp,java,mybatis,mariaDB) 본문

error diary

mariaDB decimal에 빈 값 넣기(jsp,java,mybatis,mariaDB)

if else 2022. 12. 1. 09:07

1. 일단 mybatis에서 CONVERT(#{decimal값 jdbcType=DECIMAL}, DECIMAL(15,2)) 을 해줬을때

insert는 되고 update는 안된다.

 

 

2. int값을 mybatis의 parameter를  #{decLowestPrice} 이렇게 설정하고, DB상에서 column자료형을 DECIMAL로 설정하면 자동으로 DECIMAL로 들어감

- 그러나 빈값을 넣을땐 에러 발생

 

 

3. 빈값을 넣을때 CONVERT(#{decCommision jdbcType=INTEGER}, DECIMAL(15,2)) 이렇게 설정하면 에러가 안남

- 그러나 값이 테이블에 전혀 안들어감

 

 

4. 자바에서 형변환 처리 안하고 String으로 mybatis에 넘긴 후  

CAST(#{decLowestPrice jdbcType=VARCHAR}) AS DECIMAL(15,2))

 이렇게 하니 안됨

 

 

5. 

DecimalFormat df = new DecimalFormat("###############.##");
map.put("decCommision",df.format(NumberUtils.toDouble(String.valueOf(map.get("decCommision")))));
System.out.println(map.get("decCommision").getClass());

자바에서 DecimalFormat으로 형변환 하기 위해서 double로 바꾼 후 찍어봤는데

String으로 찍힘 :( 

 

그래도 성공..

 

 

 null로 넣었을땐

값을 넣었을땐 

 

## 최종 코드 (빈 값을 NULL로 바꿔야 에러 안남)

 

	DecimalFormat df = new DecimalFormat("###############.##");
    
		if(map.get("decLowestPrice")!="") {
			map.put("decLowestPrice",df.format(NumberUtils.toDouble(String.valueOf(map.get("decLowestPrice")))));
		}
		else {
			map.put("decLowestPrice",null);
		}
		
		if(map.get("decCommision")!="") {
			map.put("decCommision",df.format(NumberUtils.toDouble(String.valueOf(map.get("decCommision")))));
		}
		else {
			map.put("decCommision",null);
		}

mariaDB 함수인 IFNULL을 쓸때도 ( #{파라미터}, '') 가 아니라  ( #{파라미터}, NULL)로 해야겠다 

 

 

 

mybatis 

decLowestPrice = #{decLowestPrice},
decCommision = #{decCommision},