Du missförstod returvärdet för PreparedStatement#execute()
.
Läs noggrant javadoc:
Retur:
true
om det första resultatet är enResultSet
objekt;false
om 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?