método close em uma variavel PreparedStatement!É necessario?

Nos meus métodos de Classe :Ex: Salvar(),Atualizar(),Deletar()…eu sempre declaro uma variavel local de PreparedStatement pra cada método, como vcs podem ver na função logo abaixo, e no bloco finally eu fecho ela com o método close()…Só que eu não sou obrigado a fechar o PreparedStatement , né !!! Como vcs fazem quando usam um preparedStatement ? Vcs fazem como eu faço ? Ou declara um PreparedStatement que vale pra classe toda ?

E o que acontece se eu não fechar o PreparedStatement ?

public void Metodo ( ){
PreparedStatement st = null;
try{
st = Conexao.getConexao().prepareStatement(
“Select …”

       ResultSet resultset = st.executeQuery(); 
       .............//comandos.................
       .............//comandos.................
  
   } 
   catch(SQLException e){ 
   
   } 
   finally{ 
                 try{ 
                           if(st != null) 
                                    st.close(); 
                 } 
                 catch(SQLException e){ 
                  
                 } 
   } 

   return;

}

Uma outra dúvida que me aconteceu…estou fazendo o seguinte:

            st = Conexao.getConexao().prepareStatement(
       Select max(id) from CLIENTE) ;

            ResultSet resultset = st.executeQuery();
if(resultset.next()){
 	 primaryKey = resultset.getInt(1) + 1;
            }

     Quando a tabela CLIENTE tá vazia, a condição IF é executada...pq ? Como faço pra que ela não seja executada quando a tabela esta vazia?

Olha, eu te daria uma sugestão que simplesmente eliminaria a necessidade do if. Altere seu select para

Desta forma já virá do banco o valor do último incrementado em 1. O problema é que se não houver registros na tabela cliente isto resultaria em nulo, ele não te retornaria 1. Mas isso também é fácil de resolver, se você procurar por uma função no banco que substitua nulo por 0. Se fosse no Oracle, por exemplo, ficaria assim:

Sobre sua dúvida anterior, o jeito que você faz não tem problema. Eu por exemplo também declaro meus prepareStatement localmente também. Você deve sim sempre fechar o prepareStatement - e do jeito que você faz, usando finally pelo que entendo está correto também. O caso é que você está liberando um recurso no banco que não está mais usando.

Eu uso o MySQL…vc conhece essa função que substitua null por 0 no mysql ?..mas uma coisa não entendi…se a tabela tá vazia, pq ele entra no IF ??:
if(resultset.next())

O método next() não serve pra testar se a tabela está vazia. Em vez dele, use um destes: isAfterLast() ou isBeforeFirst(). Quanto à função do MySql para retornar 0, pelo que pesquisei seria

de acordo com a referência:
http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_nullif