Você não entendeu o valor de retorno de
PreparedStatement#execute()
. Leia atentamente o javadoc:
Devoluções:
true
se o primeiro resultado for umResultSet
objeto;false
se o primeiro resultado for uma contagem de atualização ou se não houver resultado.
Assim, ele retorna — como esperado —
false
em um INSERT
inquerir. Ele retorna apenas true
em um SELECT
query (para a qual você normalmente gostaria de usar executeQuery()
em vez disso, que retorna diretamente um ResultSet
). Se você estiver interessado nas linhas afetadas, use
PreparedStatement#executeUpdate()
em vez de. Ele retorna um int
conforme o javadoc:Devoluções:
ou (1) a contagem de linhas para instruções SQL Data Manipulation Language (DML) ou (2) 0 para instruções SQL que não retornam nada
Um valor de retorno de 1 ou maior indicaria uma inserção bem-sucedida.
Não relacionado para o problema concreto:seu código está vazando recursos do banco de dados. Por favor, leia com atenção Com que frequência Connection, Statement e ResultSet devem ser fechados no JDBC?