Confesso que modifiquei um pouco o código ensinado, mas não vejo onde isso pode estar causando o problema (mas talvez esteja hehehe vamos ver)
Segue abaixo o meu método adicionar, o script de CREATE e a exception que está ocorrendo. Decidi passar a conexão por parâmetro ao invés de passar o statement, pois achei que o método adicionar é que deveria cuidar disso.
Outra alteração é que estou utilizando banco de dados MySQL e não repara a terminologia em Inglês... Longa história.
O erro ocorre quando tento utilizar o resultSet.getString("id") para buscar o id gerado pelo insert. Realizei um teste sem este print, e a inserção está ocorrendo corretamente. Aparentemente ele apenas não está reconhecendo o campo "id" no recordset que vem de statement.getGeneratedKeys(). Será que o MySQL retorna um nome diferente de coluna do que o HSQL?
Método Adicionar:
private static void insertProduct(String name, String description, Connection connection) throws SQLException{
String sql = "insert into product (name,description) values (?, ?)";
try (PreparedStatement statement = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS)) {
statement.setString(1, name);
statement.setString(2, description);
boolean result = statement.execute();
System.out.println(result);
try (ResultSet resultSet = statement.getGeneratedKeys()) {
resultSet.first();
System.out.println("Product with id '" + resultSet.getString("id") + "' was created");
}
}
}
Script CREATE:
CREATE TABLE Product (id INTEGER AUTO_INCREMENT PRIMARY KEY
,name VARCHAR(255)
,description VARCHAR(255)
);
Saída do sistema no momento em que o erro ocorre:
false
java.sql.SQLException: Column 'id' not found.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1077)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5190)
at ConnectionTest.insertProduct(ConnectionTest.java:44)
at ConnectionTest.main(ConnectionTest.java:24)