Skip to content

JDBC3Statement#getGeneratedKeys is required by Spring JDBC Template #996

@maciejmiklas

Description

@maciejmiklas

Describe the bug
Spring JDBC Template relays on JDBC3Statement#getGeneratedKeys(), which has been a case for years. In this commit: 712a8a5, the method has been changed, and now it throws an exception, which breaks the transaction.

To Reproduce
insert data into DB using: NamedParameterJdbcTemplate#update(....); This is the code from org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate:

@Override
	public int update(final PreparedStatementCreator psc, final KeyHolder generatedKeyHolder)
			throws DataAccessException {

		Assert.notNull(generatedKeyHolder, "KeyHolder must not be null");
		logger.debug("Executing SQL update and returning generated keys");

		return updateCount(execute(psc, ps -> {
			int rows = ps.executeUpdate();
			List<Map<String, Object>> generatedKeys = generatedKeyHolder.getKeyList();
			generatedKeys.clear();
			ResultSet keys = ps.getGeneratedKeys();
			if (keys != null) {
				try {
					RowMapperResultSetExtractor<Map<String, Object>> rse =
							new RowMapperResultSetExtractor<>(getColumnMapRowMapper(), 1);

Expected behavior
JDBC3Statement#getGeneratedKeys() should not throw an Exception but return null instead.

Logs

Caused by: org.springframework.dao.InvalidDataAccessApiUsageException: PreparedStatementCallback; 
SQL [insert into ....))]; 
not implemented by SQLite JDBC driver; nested exception is java.sql.SQLFeatureNotSupportedException: not implemented by SQLite JDBC driver
	at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:96) ~[spring-jdbc-5.3.30.jar:5.3.30]
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) ~[spring-jdbc-5.3.30.jar:5.3.30]
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82) ~[spring-jdbc-5.3.30.jar:5.3.30]
	at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1577) ~[spring-jdbc-5.3.30.jar:5.3.30]
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:669) ~[spring-jdbc-5.3.30.jar:5.3.30]
	at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:993) ~[spring-jdbc-5.3.30.jar:5.3.30]
	at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:359) ~[spring-jdbc-5.3.30.jar:5.3.30]
	at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:343) ~[spring-jdbc-5.3.30.jar:5.3.30]
	at de.bayern.stmelf.wartung.service.MaintenanceService.saveMaintenance(MaintenanceService.java:94) ~[classes/:?]

Environment (please complete the following information):

  • Spring Framework

Additional context
None

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions