Duvida com fechamento de statement e resultSet

segue a classe BD:

[code]public class BD {
public static Connection connection = null;
public static Statement statement = null;
public static ResultSet resultSet = null;
public static String banco;
public static boolean status;

public static void main(String args[]) {
	getConnection();
	close();
}

/**
 * m�todo que faz conex�o com o banco de dados Access
 * retorna true se houver sucesso, ou false em caso negativo
 */

public static boolean getConnection() {
	status = false;
	Criptografia criptografia = new Criptografia();
	
	banco=("jdbc:mysql://"+Geral.configuracao.getServidor()+"/"+Geral.configuracao.getBanco()+"?user="+Geral.configuracao.getUsuario()+"&password="+criptografia.decryptString(Geral.configuracao.getSenha()));

	try {
		Class.forName("com.mysql.jdbc.Driver");
		connection= DriverManager.getConnection( banco );
		status=true;
		System.out.println("++CONECTOU CLIENTE");

} catch(ClassNotFoundException e) {
new StackTrace(e, “”, “BD1”).setVisible(true);
} catch(SQLException e) {
new StackTrace(e, “”, “BD2”).setVisible(true);
}
return status;
}

/**
 * Fecha ResultSet, Statement e Connection
 */
public static void close() {
	try {
		connection.close();
		status=false;
		System.out.println("--DESCONECTOU CLIENTE");
	} catch(SQLException erro) {
		new StackTrace(erro, "", "BD3").setVisible(true);
	}
}


/**
 * Carrega o resultSet com o resultado do script SQL
 */
public static void setResultSet(String sql){
	try{
		statement= connection.createStatement();
		resultSet= statement.executeQuery(sql);        
        status = true;    
    }
	catch(Exception e){
        new StackTrace(e, sql, "setResultSet");
    }  
}

/**
 * Executa um script SQL de atualiza��o
 * retorna um valor inteiro contendo a quantidade de linhas afetadas
 * @throws SQLException 
 */
public static int runSQL(String sql) throws SQLException {
	int quant = 0;	
		statement= connection.createStatement();
		quant = statement.executeUpdate(sql);

// System.out.println(sql);
// System.exit(0);

	return quant;
}

}[/code]

DBUtils, e a JDBCTemplate do Spring: http://static.springsource.org/spring/docs/2.0.x/reference/jdbc.html

Veja como ela faz a execução das query’s. Cada método fica independente de thread, pois cada um cria sua conexão (e é ai onde o Pool tem importância), cria seu statement, lê seu resultado e retorna, tudo dentro do método é independente da classe.

mas Vini…qual das duas formas q eu coloquei esta mais correta!?
a que chama o metodo setResultSet e passa os parametros ou a q eu crio a statement e o resultSet sem chamar o metodo setResultSet?

No lugar do seu setResultSet, eu faria um método do tipo:

public object[] executarQuery(String sql){
		
		Connection conn = getConnection();//Vinda do Pool
		
		object[] retorno = bla bla...
		Statement stmt = null;
		ResultSet rs = null;
		try {
			stmt = conn.createStatement();
			String query = "select * from bla bla bla";

			rs = stmt.executeQuery(query);

			while(rs.next()){
				//transforme o RS em objetos.
			}
		} catch (Exception e) {
			//bla bla bla
		} finally {
			try {rs.close();} catch (SQLException e) {}
			try {stmt.close();} catch (SQLException e) {}
			try {conn.close();} catch (SQLException e) {}
		}
		return retorno ;
	}

Algo parecido, mas pelo menos dessa forma, fica independente de thread, pois cada execução do método é independente de outra.

O seu getConnection também carrega drivers toda vez que você vai obter uma conexão, e isso só é necessário uma vez:

...
Criptografia criptografia = new Criptografia();  
           
       banco=("jdbc:mysql://"+Geral.configuracao.getServidor()+"/"+Geral.configuracao.getBanco()+"?user="+Geral.configuracao.getUsuario()+"& password="+criptografia.decryptString(Geral.configuracao.getSenha()));  
   
         try {  
       Class.forName("com.mysql.jdbc.Driver"); 
...

O certo mesmo seria usar o Pool, principalmente se cada chamada ao método executarQuery criar uma nova conexão.

mas quando eu abro o programa ele cria a conexão…
depois ela soh eh fechada quando o programa eh fechado…