[RESOLVIDO] non-static method cannot be referenced
8 respostas
manuBittencourt
Boa tarde.
Estou estudando sobre conexão com o MySQL e seguindo os passos de um tutorial.
No tutorial, há uma classe Conexao com o seguinte método:
publicclassConexao{privateStringurl="jdbc:mysql://127.0.01/tutorial?user=root&password=root";publicvoidabrirConexao(){try{Class.forName("com.mysql.jdbc.Driver").newInstance();Connectioncon=DriverManager.getConnection(url);System.out.println("Conexao com Banco de Dados establecida.");}catch(SQLExceptionerroSQL){System.out.println("Erro na conexão com o Banco "+erroSQL.getMessage());}catch(ClassNotFoundExceptionerroClass){System.out.println("Erro ao carregar o Driver "+erroClass.getMessage());}catch(Exceptione){System.out.println("Ocoreru um erro: "+e.getMessage());}}publicstaticvoidmain(String[]args){newConexao().abrirConexao();}}
Ele não aceita essa linha Connection con = Conexao.abrirConexao(); dano o erro “non-static method abrirConexao() cannot be referenced from a static context”.
publicclassConexao{privateStringurl="jdbc:mysql://127.0.01/tutorial?user=root&password=root";publicConnectionabrirConexao(){try{Class.forName("com.mysql.jdbc.Driver").newInstance();Connectioncon=DriverManager.getConnection(url);System.out.println("Conexao com Banco de Dados establecida.");}catch(SQLExceptionerroSQL){System.out.println("Erro na conexão com o Banco "+erroSQL.getMessage());}catch(ClassNotFoundExceptionerroClass){System.out.println("Erro ao carregar o Driver "+erroClass.getMessage());}catch(Exceptione){System.out.println("Ocoreru um erro: "+e.getMessage());}returnconn;}publicstaticvoidmain(String[]args){Connectionconexao=newConexao().abrirConexao();}}
Achei que essa linha já servia para instanciar o método…
Rodrigo_Sasaki
não entendi o que você não entendeu.
nessa linha você está criando uma instância da classe Conexão e invocando um método, porém não está guardando a referência à esta instância.
EDIT:
exemplo de quando se guarda a referência:
Conexao conexao = new Conexao(); // se você guarda a referência pode manipular o objeto como quiser
conexao.abrirConexao();
conexao.fecharConexao();
conexao.blablabla();
agora se não guarda normalmente é porque só precisa do retorno de um método específico da classe, ou algo assim... como no seu exemplo:
Connection con = new Conexao().abrirConexao();
manuBittencourt
Entendi!
Obrigada a todos que responderam.
Rodrigo_Sasaki
Se sua dúvida foi sanada, altere o título do seu primeiro post nesse tópico e adicione a tag [RESOLVIDO], por favor…
ajuda outras pessoas que tiverem a mesma dúvida que você, e ajuda quem estiver online no forum a saber que este tópico ja foi resolvido.