2013-07-25 4 views
1

내 Spring JdbcDaoSupport 클래스에서 "insert from select"를 만들려고하는데 어떻게해야하는지 알아내는 데 어려움이 있습니다. select 문에서 데이터를 가져 와서 반환하십시오.JdbcDaoSupport with SQL SELECT from INSERT

내 EventJdbcTemplate (내 DaoImpl) :

public class EventRowMapper implements RowMapper<Event> { 

    @Override 
    public Event mapRow(ResultSet rs, int rowNum) throws SQLException { 
     final EventBuilder event = new EventImpl.EventBuilder(); 
     event.setId(rs.getInt("EVENT_ID")); 
     event.setEventName("EVENT_NAME"); 
     event.setHostName("HOST_NAME"); 
     return event.build(); 
    } 

} 

그래서 내 목표는를 반환하는 것입니다 :

@Service 
public class EventJdbcTemplate extends JdbcDaoSupport implements EventDao { 

private static final Logger LOGGER = Logger.getLogger(EventJdbcTemplate.class); 

private static final String SQL_INSERT_EVENT = "SELECT EVENT_ID FROM FINAL TABLE " + 
     "(INSERT INTO EBT10DBB.SB0401T0 (EVENT_NAME, HOST_NAME, USER_ID) " + 
     "VALUES(?, ?, \'EMP0321\'))"; 

@Autowired 
public EventJdbcTemplate(DataSource pDataSource) { 
    super.setDataSource(pDataSource); 
} 


@Override 
public Integer createEvent(EventBean pEventBean) { //(Integer id, String eventName) 
    if (LOGGER.isTraceEnabled()) { 
     LOGGER.trace("Entering create(Event event) of EventJDBCTemplate."); 
    } 
    // This SQL works, but is for an INSERT only. 
    /*this.getJdbcTemplate().query(SQL_INSERT_EVENT, new Object[]{ 
     pEventBean.getEventName(), 
     pEventBean.getHostName() 
    });*/ 

    final List eventList = this.getJdbcTemplate().query(SQL_INSERT_EVENT, new Object[]{ 
     pEventBean.getEventName(), 
     pEventBean.getHostName() 
     }, new EventRowMapper() 
    ); 

    Event event = null; 
    for (int i = 0; i < eventList.size(); i++) { 
     event = (Event)eventList.get(i); 
    } 

    if (LOGGER.isTraceEnabled()) { 
     LOGGER.trace("Exiting create(Event event) of EventJDBCTemplate."); 
    } 
    //return statement -- should return either the entire "pEventBean", or 
    //just the unique key, "EVENT_ID". 
      return event.getId(); 
} 

EventRowMapper 클래스는 (확실하지 내가 선택 여부에 대한이 필요합니다입니다) INSERT SQL에서 생성 된 고유 키 (EVENT_ID)가 될 정수 값.

+0

queryForList 대신 org.springframework.jdbc.core.JdbcTemplate.query (String sql, Object [] args, RowMapper rowMapper)를 사용하고 EventRowMapper를 전달하십시오. – aviad

+0

RowMapper를 사용하기 위해 코드를 약간 업데이트했지만 여전히 완전히 작동하지 않습니다. 레코드를 데이터베이스에 게시 할 수는 있지만 SQL에서는 실패합니다. 잘못된 매개 변수 : 알 수없는 열 이름 ID. ERRORCODE = -4460, SQLSTATE = null; – Prancer

+0

와우, 마침내 제대로 작동합니다. 내가해야만하는 것은 change event.setId (rs.getInt ("id")); ~ event.setId (rs.getInt ("EVENT_ID")); EventRowMapper 클래스에서 .... 우. EVENT_ID는 테이블의 열에 대한 실제 이름입니다. – Prancer

답변

0

당신은 여기

Link입니다 SimpleJdbcInsert

를 사용

13.5.2 가져 자동 생성 키를 다시 생성 키를 얻을 봄 섹션에서 제공하는 다음 문서를 참조 봄에서 제공 SimpleJdbcInsert를 사용할 수 있습니다