Du missförstod returvärdet för PreparedStatement#execute() .
Läs noggrant javadoc:
Retur:
trueom det första resultatet är enResultSetobjekt;falseom det första resultatet är en uppdateringsräkning eller om det inte finns något resultat.
Den returnerar alltså - som helt förväntat - false på en INSERT fråga. Den returnerar endast true på en SELECT fråga (som du dock vanligtvis vill använda executeQuery() för istället som direkt returnerar en ResultSet ).
Om du är intresserad av de berörda raderna, använd hellre PreparedStatement#executeUpdate() istället. Den returnerar en int enligt javadoc:
Retur:
antingen (1) radantalet för SQL Data Manipulation Language (DML)-satser eller (2) 0 för SQL-satser som inte returnerar något
Ett returvärde på 1 eller högre skulle då indikera en lyckad infogning.
Orelaterat till det konkreta problemet:din kod läcker DB-resurser. Vänligen läs noggrant Hur ofta ska Connection, Statement och ResultSet stängas i JDBC?