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?

Foi útil?

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");
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top