Извлечение autogererated-ключа используя PreparedStatement или JdbcTemplate

202
08 мая 2018, 01:33

Пожалуйста, объясните как можно используя каждый из этих способов извлекать ключ. К пример есть:

@Data
@FieldDefaults(level = PRIVATE)
public class Developer {
    String name;
    String specialty;
    Integer experience;
}
public interface DeveloperDao {
    public void setDataSource(DataSource dataSource);
    public void createDeveloper(String name, String specialty, Integer experience);
    public List listDevelopers();
    public void removeDeveloper(String name);
    public void updateDeveloper(String name, String specialty, Integer experience);
}
@FieldDefaults(level = PRIVATE)
public class JdbcTemplateDeveloperDaoImpl implements DeveloperDao  {
    DataSource dataSource;
    JdbcTemplate jdbcTemplate;

    @Override
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
    @Override
    public void createDeveloper(String name, String specialty, Integer experience) {
        String SQL = "INSERT INTO DEVELOPERS (name, specialty, experience) VALUES (?,?,?)";
        jdbcTemplate.update(SQL,  name, specialty, experience);
        System.out.println("Developer successfully created.\nName: " + name + ";\nSpecilaty: " +
                specialty + ";\nExperience: " + experience + "\n");
    }

    @Override
    public List listDevelopers() {
        String SQL = "SELECT * FROM DEVELOPERS";
        List developers = jdbcTemplate.query(SQL, new DeveloperMapper());
        return developers;
    }
    @Override
    public void removeDeveloper(String name) {
        String SQL = "DELETE FROM DEVELOPERS WHERE name = ?";
        jdbcTemplate.update(SQL, name);
        System.out.println("Developer with id: " + name + " successfully removed");
    }
    @Override
    public void updateDeveloper(String name, String specialty, Integer experience) {
        String SQL = "UPDATE DEVELOPERS SET name = ?, specialty = ?, experience = ? ";
        jdbcTemplate.update(SQL, name, specialty, experience);
        System.out.println("Developer with id: " + name + " successfully updated.");
    }
}
Answer 1

Вы можете получить ключи если передадите параметер объекта класса GeneratedKeyHolder в jdbcTemplate метод.

В случае PreparedStatement вы можете использовать константу RETURN_GENERATED_KEYS в качестве второго параметра

PreparedStatement statement = connection.prepareStatement(SQL_INSERT,
                                  Statement.RETURN_GENERATED_KEYS);
READ ALSO
залить фигуру картинкой java

залить фигуру картинкой java

Задача учебная на javaВ ней есть объект, который выглядит как круг и двигается за целью (типа игра)

189
Как через уведомление вызвать метод из службы в другом активити

Как через уведомление вызвать метод из службы в другом активити

Как через кнопку в уведомлении вызвать метод processIntent() в MainActivityВ уведомлении я прописал кнопки

221
log4j в простом web application (jsp, servlets). Проблема

log4j в простом web application (jsp, servlets). Проблема

В простое веб приложение подключил log4j

169
Ошибка extends :

Ошибка extends :

Для того чтобы убрать extends:

206