Skip to content
Advertisement

For SQL Server database getting “com.microsoft.sqlserver.jdbc.SQLServerException:The statement must be executed before any results can be obtained.”

public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }
List<String> columns = getColumns();
Map<String, Object> = getMap();
KeyHolder createdKey = new GeneratedKeyHolder();
int result = getJdbcTemplate().update((PreparedStatementCreator) con -> {
                PreparedStatement ps = con.prepareStatement(sql);
                for(int i=0;i<columns.size();i++){
                    Object value = columnNameValueMap.get(columns.get(i));
                    if(value instanceof String || value instanceof Date){
                        ps.setString(i+1, String.valueOf(value));
                    }else if(value instanceof Boolean){
                        if(value.equals(true))
                            ps.setInt(i+1, 1);
                        else
                            ps.setInt(i+1, 0);
                    }else if(value instanceof Integer){
                        ps.setInt(i+1, (Integer) value);
                    }else if(value instanceof BigDecimal){
                        ps.setBigDecimal(i+1, (BigDecimal) value);
                    }
                }
                return ps;
            },createdKey);

I am getting above error when trying to perform insert operation from java application using JDBCTemplate.

org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; The statement must be executed before any results can be obtained.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained

Advertisement

Answer

Change prepare call to con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement