Cara tambem tenho essa msm duvida, pra ficar mais tranquilo de erros futuros eu crio duas ps para cada operacao e depois fecho as duas tb, mas se for possivel usar apenas uma sem ter problemas, eu tb quero saber
Sim, voce pode reutilizar. Lembre-se apenas que antes de criar outro statement vc precisa dar um close() nele, caso contrario voce tera um memory leak que rapidamente ira derrubar o seu sistema.
Ou seja:
PreparedStatement ps ....
ps = con.prepareStatement("INSERT INTO");
ps.setString(1,"bla");
ps.execute();
ps.close(); // <-- FECHE
ps = con.prepareStatement("UPDATE ... set ...");
ps.setString(1,"Ble");
ps.executeUpdate();
//Aqui eu fecho o ps e con ...
ps.close();
con.close(); // <-- A conexao vc libera soh no final mesmo
Se eu fizer como vc falou eu não consigo recuperar um ultimo registro, eu estou usando o mesmo PreparedStatement pra inserir e logo após pesquisar o ultimo valor inserido. existe uma outra maneira para mim recuperar esse ultimo registro (sem usar select MAX()) , ja que não é recomendado usar o mesmo ps sem antes fecha-lo ?
Uma coisa nao tem nada a ver com a outra. Voce pode fechar o statement e depois fazer a query para pegar o ultimo id gerado. Voce teria problemas apenas se fechasse a conexao.