Źle zrozumiałeś wartość zwracaną przez PreparedStatement#execute()
.
Proszę uważnie przeczytać javadoc:
Zwroty:
true
jeśli pierwszym wynikiem jest ResultSet
obiekt; false
jeśli pierwszy wynik to liczba aktualizacji lub nie ma wyniku.
W ten sposób zwraca — jak w pełni oczekiwano — false
na INSERT
zapytanie. Zwraca tylko true
na SELECT
zapytanie (dla którego zazwyczaj chciałbyś użyć executeQuery()
zamiast tego zwraca bezpośrednio ResultSet
).
Jeśli interesują Cię wiersze, których dotyczy problem, użyj PreparedStatement#executeUpdate()
zamiast. Zwraca int
zgodnie z javadoc:
Zwroty:
(1) liczba wierszy dla instrukcji SQL Data Manipulation Language (DML) lub (2) 0 dla instrukcji SQL, które nic nie zwracają
Zwrócona wartość 1 lub większa wskazywałaby wtedy na pomyślne wstawienie.
Niezwiązane do konkretnego problemu:Twój kod przecieka zasoby bazy danych. Przeczytaj uważnie Jak często połączenie, zestawienie i zestaw wyników powinny być zamykane w JDBC?