2017-01-25 7 views
0

하나의 열이 200 자 길이 인 varchar 제한 인 SQLYog에 테이블이 있습니다. 삽입에 대한 아래 메소드를 작성했지만 코드를 테스트 할 때 "Name"열이 DB의 데이터로 채워지지 않았습니다.jdbc를 사용한 스프링 삽입

@Override 
public void insert(final List<InfoRow> rows) { 
    String sql = "INSERT INTO info_table (ID, NAME, AGE) VALUES (?, SUBSTRING(?, 0, 200), ?)"; 

    jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { 

     @Override 
     public void setValues(PreparedStatement ps, int i) 
       throws SQLException { 
      InfoRow row= rows.get(i); 
      ps.setInt(1, (int) row.getId()); 
      ps.setString(2, row.getName()); 
      ps.setInt(3,(int) row.getAge()); 
     } 

     @Override 
     public int getBatchSize() { 
      return rows.size(); 
     } 
    }); 

} 

삽입하는 동안 '이름'크기를 확인하는 올바른 방법은 무엇입니까?

감사합니다.

답변

0

MySQL의 하위 문자열 표현 (sqlyog 태그를 기반으로 한 추측)은 0 기반이 아닌 1 기반입니다.

SUBSTRING(?, 1, 200) 

일반적으로, 나는 데이터베이스 계층에서 유효성 검사 논리를 유지하는 것, 및 응용 계층에서 "나쁜 입력을"처리 : 대신 사용해보십시오. 이렇게하면 데이터가 삭제되거나 잘리는 사실을 기록 할 수 있습니다.

하지만이 방법이 좋습니다.

+0

감사합니다. 공장! – userit1985

0

여기에 설명 된 것처럼 입력을 확인하는 올바른 방법은 모델 레이어가 아닌 서비스 레이어에 있습니다. DAO는 지속성 데이터의 유효성을 확인하지 않아도됩니다.

insert(List<InfoRow>); 메서드를 호출하는 서비스가 있어야하며 유효성을 검사해야합니다.