Du har misforstået returværdien af PreparedStatement#execute() .
Læs venligst javadoc:
omhyggeligtReturneringer:
true hvis det første resultat er et ResultSet objekt; false hvis det første resultat er et opdateringstal, eller der ikke er noget resultat.
Det returnerer således - som fuldt forventet - false på en INSERT forespørgsel. Det returnerer kun true på en SELECT forespørgsel (som du dog normalt vil bruge executeQuery() til i stedet som returnerer direkte et ResultSet ).
Hvis du er interesseret i de berørte rækker, skal du hellere bruge PreparedStatement#executeUpdate() i stedet. Det returnerer en int i henhold til javadoc:
Returneringer:
enten (1) rækkeantallet for SQL Data Manipulation Language (DML)-sætninger eller (2) 0 for SQL-sætninger, der ikke returnerer noget
En returværdi på 1 eller større ville så indikere en vellykket indsættelse.
Ikke-relateret til det konkrete problem:din kode lækker DB-ressourcer. Læs venligst omhyggeligt Hvor ofte skal Connection, Statement og ResultSet lukkes i JDBC?