ist die Situation wie folgt:Fetch Primärschlüssel, erzeugt durch Sequenz jdbctemplate/Jdbc
Ich habe eine Tabelle (GUI_FILTER) und eine Folge (GUI_FILTER_SEQ) I-Daten am Einfügen springjdbctemplate verwenden, können auch Kern Jdbc verwenden, wie Gut. In der Einfügeabfrage erhalte ich sequence.nextval und benutze auch einen Schlüsselhalter, um das zurück zu Java wie unten zu holen. Ich habe mehr Möglichkeiten ausprobiert wie
returnRowCount = namedJdbctmplt.update(sql.toString(), namedParameters, keyHolder, keyColumnNames);
returnRowCount = jdbctemplate.update(psc, keyHolder);
mit beiden versagen,
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00936: missing expression
StringBuilder sql = new StringBuilder();
sql.append(" Insert Into MAPS_AMPS.AMPS_GUI_FILTER ");
sql.append(" (FILTER_PRESET_ID,USER_ID,FILTER_PAGE_TXT,FILTER_DISPLY_NM,FILTER_DATA_TXT,ROW_CREATE_TMS,LAST_UPDT_TMS) ");
sql.append(" values(Select MAPS_AMPS.AMPS_GUI_FILTER_SEQ.NEXTVAL,?,?,?,?,CURRENT_TIMESTAMP ,null from dual) ");
final String sqlQuery = sql.toString();
Wenn ich den Sequenzerzeugungsteil Select MAPS_AMPS.AMPS_GUI_FILTER_SEQ.NEXTVAL
etwas konstant wie 30 zu entfernen oder so ist es gut funktioniert.
Gibt es eine Möglichkeit, Sequenzwert als Befehl einzufügen und gleichzeitig den Primärschlüssel mit jdbc holen?
Kompletter Code ist wie folgt.
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = DataAccessException.class)
public Long addFilterPreset(final String userId, final String filterPageCd,
final String filterPresetDisplayName,
final String serializedTaskBrowserSearchObj) {
logger.debug("Start of FilterPresetDaoImpl - addFilterPreset() method");
if(!countSavedFilterPresets(userId,filterPageCd))
return null;
//StringBuilder sql = new StringBuilder();
Map<String, Object> parameterMap = new HashMap<String, Object>();
//sql.append(" Insert Into MAPS_AMPS.AMPS_GUI_FILTER ");
//sql.append(" (FILTER_PRESET_ID,USER_ID,FILTER_PAGE_TXT,FILTER_DISPLY_NM,FILTER_DATA_TXT,ROW_CREATE_TMS,LAST_UPDT_TMS) ");
//sql.append("Values(Select MAPS_AMPS.AMPS_GUI_FILTER_SEQ.NEXTVAL,:userId,:filterPageCd,:filterPresetDisplayName,:filterPresetData,CURRENT_TIMESTAMP ,null)");
/*parameterMap.put("userId", userId);
parameterMap.put("filterPageCd", filterPageCd);
parameterMap.put("filterPresetDisplayName", filterPresetDisplayName);
parameterMap.put("filterPresetData", serializedTaskBrowserSearchObj);
*/
StringBuilder sql = new StringBuilder();
sql.append(" Insert Into MAPS_AMPS.AMPS_GUI_FILTER ");
sql.append(" (FILTER_PRESET_ID,USER_ID,FILTER_PAGE_TXT,FILTER_DISPLY_NM,FILTER_DATA_TXT,ROW_CREATE_TMS,LAST_UPDT_TMS) ");
sql.append(" values(Select MAPS_AMPS.AMPS_GUI_FILTER_SEQ.NEXTVAL,?,?,?,?,CURRENT_TIMESTAMP ,null from dual) ");
final String sqlQuery = sql.toString();
logger.info("SQL Add Filter Preset Query : {}", sqlQuery);
int returnRowCount = 0;
KeyHolder keyHolder = new GeneratedKeyHolder();
final String[] keyColumnNames = {"FILTER_PRESET_ID"};
SqlParameterSource namedParameters = new MapSqlParameterSource(parameterMap);
PreparedStatementCreator psc = new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection)
throws SQLException {
PreparedStatement ps = connection.prepareStatement(sqlQuery, keyColumnNames);
ps.setString(1, userId);
ps.setString(2, filterPageCd);
ps.setString(3, filterPresetDisplayName);
ps.setString(4, serializedTaskBrowserSearchObj);
return ps;
}
};
try{
long startValue = System.currentTimeMillis();
//returnRowCount = namedJdbctmplt.update(sql.toString(), namedParameters, keyHolder, keyColumnNames);
returnRowCount = jdbctemplate.update(psc, keyHolder);
long endValue = System.currentTimeMillis();
logger.info("Filter Preset added in {} seconds", (endValue - startValue)/1000);
}catch(Exception e){
logger.info("Exception while adding filter preset - " + "userId : "+userId+" filterPageCd : "+filterPageCd +" filterPresetData : "+serializedTaskBrowserSearchObj);
}finally{
logger.debug("End of FilterPresetDaoImpl - addFilterPreset() method");
}
if (returnRowCount > 0)
return keyHolder.getKey().longValue();
return null;
}
Fehler