Špatně jste pochopili návratovou hodnotu PreparedStatement#execute() .
Přečtěte si prosím pozorně javadoc:
Vrátí:
truepokud je prvním výsledkemResultSetobjekt;falsepokud je prvním výsledkem počet aktualizací nebo neexistuje žádný výsledek.
Vrací tedy – jak se plně očekává – false na INSERT dotaz. Vrací pouze true na SELECT dotaz (pro který byste však obvykle chtěli použít executeQuery() místo toho vrací přímo ResultSet ).
Pokud vás zajímají dotčené řádky, použijte raději PreparedStatement#executeUpdate() namísto. Vrací int podle javadoc:
Vrátí:
buď (1) počet řádků pro příkazy SQL Data Manipulation Language (DML), nebo (2) 0 pro příkazy SQL, které nic nevrací
Návratová hodnota 1 nebo vyšší by pak znamenala úspěšné vložení.
Nesouvisí ke konkrétnímu problému:váš kód uniká prostředky DB. Pečlivě si přečtěte Jak často by měly být v JDBC uzavřeny Connection, Statement a ResultSet?