Я использую Statement.RETURN_GENERATED_KEYS
для решения следующей проблемы: после вставки строки в базу данных и последующего получения ее идентификатора, выполнив новый выбор, иногда строка не обнаруживается - почему-то информация не попала в БД.
Я предполагаю, что этот флаг гарантирует, что данные передаются в базу данных перед выполнением следующей строки кода. Если так:
Statement.RETURN_GENERATED_KEYS
влияет на производительность? Разрешить выполнение без этого флага будет выполняться быстрее?[Edit] - Я использую MySQL Server в качестве БД, c3p0 для реализации пула соединений и mysql-connector-java для драйвера. Чтобы получить представление о контексте, о котором я говорю, ниже приведен фрагмент кода:
StringBuilder insertedId = new StringBuilder("");
DAOSession session = DAOSession.getInstance();
Connection conn = session.aquireTransaction();
Statement stm = null;
try {
stm = conn.createStatement();
stm.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (stm != null) {
// Find and return the generated key
try (ResultSet generatedKeys = stm.getGeneratedKeys()) {
if (generatedKeys.next()) {
insertedId.setLength(0);
insertedId.append(generatedKeys.getString(1));
} else {
// Log this scenario
}
}
stm.close();
}
conn.close();
}
🤔 А знаете ли вы, что...
Java имеет множество библиотек и фреймворков, упрощающих разработку.