Ajuda JDBC

Pessoal fiz uma classe para uma conexão JDBC, para conectar e desconectar de uma base de dados, porem ao tentar desconectar ele mostra a mensagem que Conectou e Desconectou da Base de dados, porem o objeto da conexão fica na memória. Alguem sabe porque acontece esse erro?

Obs: Se coloco o retorno como null funciona. Então para que serve o close() se não fecha a conexão?

Segue abaixo a mensagem:

Conectado

DESCONECTADO

com.ddtek.jdbc. openedge. OpenEdgeConnecti on@120b476

Objeto conexão na memoria: com.ddtek.jdbc. openedge. OpenEdgeConnecti on@120b476

====================================================================================

[code]// Classe de Conexão
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {

//================ Dados do Banco de Dados(PROGRESS) - Webdesk =================================//

//Dados do Banco de Dados
private static final String NOME_BANCO = "xxx";//Nome do Banco
private static final String USER = "xxx";
private static final String PASSWORD = "xxx";

//Conexão com Progress - Conectores openedge.jar, util.jar, base.jar, pool.jar, spy.jar
private static final String STR_DRIVER = "com.ddtek.jdbc.openedge.OpenEdgeDriver";
private static final String STR_CON = "jdbc:datadirect:openedge://neo:16006;databaseName="+NOME_BANCO; 

//==================================================================================//

//========================= Função para conectar com banco de dados =========================//

public Connection Conectar(Connection conn){
	try {
		Class.forName(STR_DRIVER);
		conn = DriverManager.getConnection(STR_CON, USER, PASSWORD);
		System.out.println("Conectado");
		return conn;
	} catch (ClassNotFoundException e) {
		System.out.println("Driver nao encontrado");
		e.printStackTrace();
		return null;
	} catch (SQLException e) {
		System.out.println("Erro ao obter a conexão");
		e.printStackTrace();
		return null;
	}
}

//==================================================================================//

//======================= Função para desconectar do banco de dados =========================//

public Connection Desconectar(Connection conn){
	try {
		if(conn !=null){
			System.out.println("DESCONECTADO");
			conn.close();
		}
		return conn;
	} catch (SQLException e) {
		System.out.println("Erro ao tentar Desconectar");
		e.printStackTrace();
		return conn;
	}
	
}

//==================================================================================//
}

====================================================================================
// Classe de execução

import java.io.IOException;
import java.sql.Connection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.xxx.model.DBConnection;

public class CadastroComplexoController extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;

public CadastroComplexoController() {
	super();
}   	


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	Connection conn = null;
	DBConnection db = new DBConnection();
	
	conn = db.Conectar(conn);
	conn = db.Desconectar(conn);
	
	System.out.println(conn.toString());
}  	

} [/code]

bom, pq no método desconectar vc retorna a conexão??? pelo que entendi o objeto conexão fica msm na memória, só sai quando o Garbage Collector passar, creio que o que ele está mostrando no System.out é o endereço de memória do seu objeto conexão. Quando fechamos a conexão o seu objeto não conversa mais com o banco, porém o seu objeto na classe ainda vai existir…

Quando a conexão está fechada(close), não quer dizer que está null(nula).

Com isso seus IFs vão dar problemas.

Tem outra função pra isso mas agora não lembro…deve ser algo como IsClose, ou Is Connenctec? sei lá

PS: Não olhei seu código em detalhes, mas ainda sim é bom ficar atento a isso.

Entendi mais porque então se eu tentar fazer uma nova conexão em seguida ele não exibe a mensagem Conectado sendo que a conexão já foi finalizada com close()? Obs: Se retorno null ele realizada uma nova conexão!

Desculpe estar fazendo tantas perguntas é que queria entender como funciona!

Desde já, agradeço pela atenção!