é 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.....
publicclassBanco{publicConnectionconnection;publicBanco(){Stringurl="jdbc:firebirdsql:localhost/3050:c:/IBOconsole/Locadora.gdb";Stringusername="SYSDBA";Stringpassword="masterkey";try{Class.forName("org.firebirdsql.jdbc.FBDriver");connection=DriverManager.getConnection(url,username,password);}catch(ClassNotFoundExceptioncnfex){System.err.println("Failed to load JDBC");cnfex.printStackTrace();System.exit(1);}catch(SQLExceptionsqlex){System.err.println("Nao pode conectar");sqlex.printStackTrace();}}}
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
StefaninPJ
Como faço essa função que retorna o connection ?
Não entendi direito !
[]'s
R
renan_danielPJ
public class Banco {
private Connection connection;
....
public Connection getConexao() {
return this.connection;
}
}
D
DianaPJ
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
publicclassConexao{privatestaticConexaoconexao;//construtor privadoprivateConexao(){try{//TODO métodos para conectar}publicstaticConexaogetConexao(){if(conexao==null){conexao=newConexao();}returnconexao;}}
[]'s
R
renan_danielPJ
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
matheusPJ
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
StefaninPJ
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
DianaPJ
Tens que fazer…
Conexao.getConexao();
Pq daí através do getConexao() é que ele chama o construtor privado!
[]'s
M
maluquo1PJ
obrigado pela ajuda de todos, fiz como o renan_daniel disse e deu certo aki.