JDBC, MySQL: obter dados de linha de volta da executa PreparedStatement
-
05-07-2019 - |
Pergunta
Eu estou usando a seguinte configuração:
public MySQLProcessWriter(Connection con) throws SQLException {
String returnNames[] = {"processId","length","vertices"};
addresser = con.prepareStatement("INSERT INTO addressbook (length, vertices, activity) VALUES (?, ?, ?)", returnNames);
}
corresponde processId
a uma coluna auto-incremento na tabela de endereços. Portanto, a ideia é: eu tenho uma inserção repetida, eu voltar um pouco do que foi inserido + a processID gerado automaticamente. No entanto, estou recebendo uma "coluna não encontrado" SQLException quando tento addresser.getGeneratedKeys().getInt("processId");
depois de executar a instrução preparada (após o ajuste apropriado de valores). O código para que seja
addresser.setInt(1, length);
addresser.setInt(2, vertices);
addresser.setDouble(3, activity);
addresser.executeUpdate();
int processId = addresser.getGeneratedKeys().getInt("processId");
dentro de um laço que está a actualizar comprimento, vértices, actividade. Então ... o que dá? Am I mal entendido o que o prepareStatement (sqlstring, string []) método faz?
Solução
Eu acho que você precisa chamar next () no conjunto de resultados retornado
ResultSet keys = addresser.getGeneratedKeys();
int processId = -1;
if (keys.next())
{
processId = keys.getInt("processId");
}
Outras dicas
Você tem que chamar o método next()
em ResultSet
retornou de getGeneratedKeys()
antes de chamar getInt()
ResultSet rs = addresser.getGeneratedKeys();
int processId = 0;
if (rs.next()) {
processId = rs.getInt("processId");
}