Не сте разбрали връщаната стойност на PreparedStatement#execute() .
Моля, прочетете внимателно javadoc:
Връща:
trueако първият резултат еResultSetобект;falseако първият резултат е броене на актуализации или няма резултат.
По този начин връща — както се очаква напълно — false на INSERT запитване. Връща само true на SELECT заявка (за която обаче обикновено бихте искали да използвате executeQuery() вместо това, което връща директно ResultSet ).
Ако се интересувате от засегнатите редове, по-скоро използвайте PreparedStatement#executeUpdate() вместо. Връща int според javadoc:
Връща:
или (1) броят на редовете за изрази SQL Data Manipulation Language (DML), или (2) 0 за SQL изрази, които не връщат нищо
След това върната стойност от 1 или по-голяма би означавала успешно вмъкване.
Несвързани към конкретния проблем:вашият код изтича DB ресурси. Моля, прочетете внимателно Колко често трябва да се затварят Connection, Statement и ResultSet в JDBC?