Classe pra BD

10 respostas
M
é errado fazer uma classe pro BD com uma conexao publica?? pra dai quando precisa mandar a conexao para outras classes só fazer um objeto.connection?? pq se ficar privado nao da, tipo assim.....
public class Banco {
	public Connection connection;
	
	public Banco(){
		String url = "jdbc:firebirdsql:localhost/3050:c:/IBOconsole/Locadora.gdb";
		String username = "SYSDBA";
		String password = "masterkey";
		try{
			Class.forName("org.firebirdsql.jdbc.FBDriver");
			connection = DriverManager.getConnection(url, username, password);
		}
		catch(ClassNotFoundException cnfex){
			System.err.println("Failed to load JDBC");
			cnfex.printStackTrace();
			System.exit(1);
		}
		catch(SQLException sqlex){
			System.err.println("Nao pode conectar");
			sqlex.printStackTrace();
		}
	}

}
e dai por exemplo em uma classe fazer isso....
Banco c = new Banco();
......
//abre um frame interno com a tabela de filmes
Filmes AbrirFilmes = new Filmes(c.connection)
desktop.add(AbrirFilmes);
AbrirFilmes.show();

10 Respostas

R

vc pode estar deixando o connection privado sim, depois vc cria um metodo publico, por exemplo getConexao() que retorna o connection.

Isto é chamado encapsulamento.

S

Como faço essa função que retorna o connection ?

Não entendi direito !

[]'s

R

public class Banco { private Connection connection; .... public Connection getConexao() { return this.connection; } }

D

Hum…as vezes é interessante usar o pattern Singleton para classes de conexão…pq vc não quer várias conexões abertas…mas, veja bem, dependendo do caso, as vezes tb é melhor usar um pool, ou deixar que o próprio AS gerencie as conexões.

exemplo de Conexao Singleton

public class Conexao{
      private static Conexao conexao;


      //construtor privado
      private Conexao(){
          try{
          //TODO métodos para conectar
      }

       public static Conexao getConexao(){
       if(conexao==null){
          conexao=new Conexao();
       }
       return conexao;
       }

}

[]'s

R

só complementando o que a Diana disse.

O padrão Singleton naum permite que criemos outras instâncias da classe, por isso seu construtor é privado.

M

enfatizando oq a Diana disse, se a sua aplicação roda em um servidor de aplicação, use o pool oferecido pelo servidor… não pense 2x…

S

Estou totalmente confusa …rs.rs

Criei a classe Conexao() que possui o método getConexao() que me retorna o connection.

Na outra classe fiz da seguinte maneira :

Conexao c = new Conexao();

e nos métodos nos quais eu preciso de conexao eu utilizo o c.getConexao().

Só que quando compilo o programa aparece java.lang.NullPointerException

O que está errado no que estou fazendo?

Como posso utilzar a classe demonstrada pela Diana já que não consigo instanciá-la ?!

Desulpem …

Mais é que sou meio nova nisso ! =(

Obrigada pela ajuda ! ! !

Bjs

D

Tens que fazer…

Conexao.getConexao();

Pq daí através do getConexao() é que ele chama o construtor privado!

[]'s

M

obrigado pela ajuda de todos, fiz como o renan_daniel disse e deu certo aki.

Stefanin: ve se o drive do BD ta instalado certo :slight_smile:

S

[b][color=“red”]Agora sim …

Fiz como a Diana disse e deu certo !

Valeeeeuuuu Galera ! ! ! !

Muito obrigada pela ajuda…

Bjs[/color][/b] :razz:

Criado 18 de janeiro de 2005
Ultima resposta 18 de jan. de 2005
Respostas 10
Participantes 5