E ai pessoal,
estou fazendo uma classe clientes onde nela constará gravação, edição, pesquisa e remoção de clientes no DB. Estou criando os métodos mas no momento em que estou retornando a conexao com o DB esta falando que esta perdendo o statement. Eis o código:
public class classeClientes{
/* METODO CONSTRUTOR DA CLASSE REALIZANDO A CONEXAO COM O BANCO DE DADOS */
public Connection classeClientes(){
Connection con = null;
try{
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver).newInstance();
con = DriverManager.getConnection("jdbc:odbc:BancoPostgreSQL","postgres","92241696");
return con;
}catch(Exception e){
e.printStackTrace();
}
} /* <-- ERRO: missing return statement */
/* METODO PARA GRAVAR CLIENTE NO BANCO DE DADOS */
public void gravaCliente(){
Connection mCon = classeClientes();
try{
String r1,r2,r3,r4 = null;
r1="teste";
r3="teste";
r4="teste";
Statement s = mCon.createStatement();
r2 = "INSERT INTO clientes (nome,fone,email) VALUES ('"+ r1 +"','"+ r3 +"','"+ r4 +"')";
int update_count = s.executeUpdate(r2);
s.close();
}catch(Exception e){
e.printStackTrace();
}
finally{
JOptionPane.showMessageDialog(null,"CLIENTE GRAVADO NO SISTEMA COM SUCESSO");
if( mCon != null){
try{ mCon.close(); }
catch(SQLException e){
e.printStackTrace();
}
}
}
}
quando vc diz public Connection classeClientes() vc sempre tem que retornar uma Connection (isso vale pra qualquer tipo de retorno), no seu codigo caso ocorra uma exceção nada é retornado ou seja, seu metodo não cumpri o contrato que se propoe (retornar uma Connection)
sugeriria essa alteração!
public Connection classeClientes(){
Connection con = null;
try{
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver).newInstance();
con = DriverManager.getConnection("jdbc:odbc:BancoPostgreSQL",
"postgres","92241696");
}
catch(Exception e){
e.printStackTrace();
}
return con;
}
dessa forma vc sempre retorna uma Connection (q pode estar null), vc sempre pode retornar null quando o tipo do retorno for um objeto
Simplificando, todo método exceto void, requer um retorno.
Exemplo:
public int soma(int a, int b){
int soma = a + b;
}//requer retorno*
Caso eu tente compilar dessa forma ele vai reclamar que não há o retorno nesse método, foi o que aconteceu no seu erro, nesse caso seria:
public int soma(int a, int b){
int soma = a + b;
return soma;
}
ok?
Somente lembrando para que quando for postar seu código não se esqueça de usar as tags de code para ficar melhor pra gente entender.
De acordo com os seus comentários, public Connection classeClientes() era para ser um construtor, portanto você não deveria especificar um tipo de retorno para ele. Mas, uma vez que você especificou Connection como tipo de retorno, o compilador do Java considera que você está declarando um método, e não um construtor, logo exige que você retorne algum valor do método, o que não acontece.
Sendo assim, há duas soluções:
1- Fazer com que o método seja de fato um construtor, o que significaria adicionar uma variável de instância Connection, entre outras coisas.
2- Corrigir o método fazendo com que ele retorne um Connection.
pessoal, entendi perfeitamente.
Vou tentar primeiro pelo método de retorno no fim do método como sugerido por Firerood e se der tudo certo tentarei fazer como manda o figurino, onde classeCliente() vire mesmo um método contrutor.
Realmente a curva de aprendizado para JAVA é exponencial mas é emocionante, muito obrigado a todos …
O problema é esse mesmo que o Fierodd falou. Vc colocou o retorno dentro de um bloco protegido, precisas colocar ele abaixo do bloco catch{ }. O compilador não conseguirá ler o retorno dentro do bloco protegido.
PS: Quando conseguir ter sucesso, posta pra o pessoal o que vc fez.
Abraços,
Rulio Vangellis.
Quero primeiramente agradecer a todos. Thanks for all
Segue o código rodando que nem balinha na boca de banguelo …
public class classeClientes{
/* METODO CONSTRUTOR DA CLASSE REALIZANDO A CONEXAO COM O BANCO DE DADOS */
public Connection classeClientes(){
Connection con = null;
try{
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver).newInstance();
con = DriverManager.getConnection("jdbc:odbc:BancoPostgreSQL","postgres","92241696");
}catch(Exception e){
e.printStackTrace();
}
return con; /* retornando uma conexao que pode ser null ou não */
}
/* METODO PARA GRAVAR CLIENTE NO BANCO DE DADOS */
public void gravaCliente(){
Connection mCon = classeClientes(); /* Ao instanciar já se conecta ao DB */
try{
String r1,r2,r3,r4 = null;
r1="teste";
r3="teste";
r4="teste";
Statement s = mCon.createStatement();
r2 = "INSERT INTO clientes (nome,fone,email) VALUES ('"+ r1 +"','"+ r3 +"','"+ r4 +"')";
int update_count = s.executeUpdate(r2);
s.close();
}catch(Exception e){
e.printStackTrace();
}
finally{
JOptionPane.showMessageDialog(null,"CLIENTE GRAVADO NO SISTEMA COM SUCESSO");
if( mCon != null){
try{ mCon.close(); }
catch(SQLException e){
e.printStackTrace();
}
}
}
}
}