No entendiste el valor de retorno de PreparedStatement#execute()
.
Lea atentamente el javadoc:
Devoluciones:
true
si el primer resultado es un ResultSet
objeto; false
si el primer resultado es un recuento de actualizaciones o no hay ningún resultado.
Por lo tanto, devuelve, como se esperaba, false
en un INSERT
consulta. Solo devuelve true
en un SELECT
consulta (para la cual, sin embargo, generalmente le gustaría usar executeQuery()
en cambio, que devuelve directamente un ResultSet
).
Si está interesado en las filas afectadas, utilice PreparedStatement#executeUpdate()
en cambio. Devuelve un int
según el javadoc:
Devoluciones:
ya sea (1) el recuento de filas para declaraciones SQL Data Manipulation Language (DML) o (2) 0 para declaraciones SQL que no devuelven nada
Un valor de retorno de 1 o mayor indicaría una inserción exitosa.
No relacionado al problema concreto:su código está filtrando recursos DB. Lea detenidamente ¿Con qué frecuencia se deben cerrar Connection, Statement y ResultSet en JDBC?