Anda salah memahami nilai kembalian PreparedStatement#execute() .
Harap hati-hati membaca javadoc:
Pengembalian:
truejika hasil pertama adalahResultSetobyek;falsejika hasil pertama adalah hitungan pembaruan atau tidak ada hasil.
Dengan demikian mengembalikan — seperti yang diharapkan sepenuhnya — false pada INSERT pertanyaan. Ini hanya mengembalikan true pada SELECT kueri (yang biasanya Anda ingin gunakan executeQuery() sebagai gantinya yang mengembalikan secara langsung ResultSet ).
Jika Anda tertarik dengan baris yang terpengaruh, gunakan PreparedStatement#executeUpdate() sebagai gantinya. Ini mengembalikan int sesuai javadoc:
Pengembalian:
baik (1) jumlah baris untuk pernyataan SQL Data Manipulation Language (DML) atau (2) 0 untuk pernyataan SQL yang tidak menghasilkan apa-apa
Nilai kembalian 1 atau lebih besar akan menunjukkan penyisipan yang berhasil.
Tidak terkait untuk masalah konkret:kode Anda membocorkan sumber daya DB. Harap baca dengan cermat Seberapa sering Connection, Statement, dan ResultSet harus ditutup di JDBC?