Erro na conexão com ORACLE

11 respostas
L

Estou com problemas quanto à conexão com o Oracle. Estou utilizando uma classe que já havia utilizando antes e que estava funcionando bem. Só alterei o url, usuário e senha. Veja código abaixo…:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;

/**
 *
 * @author Leandro
 */
public class Conexao implements java.io.Serializable {

    private Connection con = null;
    //private Conection con = null;
    private Statement stm = null;
    private ResultSet rs = null;

    private String hostName = null;
    private String userName = null;
    private String password = null;
    private String url = null;
    private String jdbcDriver = null;
    private String dataBaseName = null;
    private String dataBasePrefix = null;
    private String dabaBasePort = null;


    /** Cria uma nova instância de conexão */
    public Conexao() {
        super();
        hostName = "172.24.10.254";//sitmat:"172.24.10.254";//gerop:"172.23.26.240"; //"sitmat01"; - nome do host.
        dataBaseName = "sitmat01";
        
        // Oracle
        userName = "labrel"; //Nome de usuario
        password = "labrel"; // Senha
        jdbcDriver = "oracle.jdbc.driver.OracleDriver"; //dentro do arquivo jar (jar file) tem uma pasta oracle/jdbc/driver e o driver utilizado Oracle Driver.
        dataBasePrefix = "jdbc:oracle:thin:@"; // 
        dabaBasePort = "1521";

        url = dataBasePrefix + hostName + ":" + dabaBasePort + ":" + dataBaseName;
        //a url acima deve ficar assim: url = oracle:thin:@171.14.10.154:1521:sitmat01;
        System.out.println("URL - "+url);
        getConnection();
    }


    //Conexao Pública -> getConnection() {
    public void getConnection() {
        try {
          if (con == null) {
            Class.forName(jdbcDriver);
            con = DriverManager.getConnection(url, userName, password);
            System.out.println("Conexao Efetuada!!!");
          } else if (con.isClosed()) {
            System.out.println("Conexao esta fechada");
            Class.forName(jdbcDriver);
            con = DriverManager.getConnection(url, userName, password);                        
          }
        } catch (ClassNotFoundException e) {
          //TODO: use um sistema de log apropriado.
            e.printStackTrace();
        } catch (SQLException e) {
          //TODO: use um sistema de log apropriado.
          e.printStackTrace();
        }        
    }

      /**
       * Fecha a conexão com BD.       
       */
      public void closeConnection() {
        if (con != null) {
          try {
            con.close();
          } catch (SQLException e) {
            //TODO: use um sistema de log apropriado.
            e.printStackTrace();
          }
        }
      }



    public ResultSet consultar(String query)
    {

        getConnection();
        ResultSet rs = null;
        try {
              Class.forName(jdbcDriver);
              // create a statement object which creates a Scrollable resultset.
              Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
              rs = stm.executeQuery(query);
              return rs;
      }
      catch (SQLException e)
      {
          JOptionPane.showMessageDialog(null, " Erro na execução do metodo consultar! \n" + e.getMessage());          
          return null;
      }
      catch(ClassNotFoundException e) {
          JOptionPane.showMessageDialog(null, "excessao - Classe Nao Encontrada: "+e.getMessage());          
          e.printStackTrace();
          return null;
      }

        finally {
        }
  }

     public void executarSQL(String sql){

        getConnection();
         try {
              Class.forName(jdbcDriver);
              Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
              stm.executeUpdate(sql);

        } catch(ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, "excessão Classe não encontrada: "+e.getMessage());
            e.printStackTrace();
        } catch(SQLException e) {
            JOptionPane.showMessageDialog(null, "Erro na execução do método executarSQL() - "+e.getMessage());
            e.printStackTrace();
        } finally {

        }
     }

}

Quando vou conectar ao banco de dados após um longo tempo de espera, me é retornado a seguinte mensagem de erro:

<blockquote>java.sql.SQLException: Exceção de E/S: The Network Adapter could not establish the connection

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:334)

at oracle.jdbc.ttc7.TTC7Protocol.handleIOException(TTC7Protocol.java:3695)

at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:352)

at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:362)

at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:536)

at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:328)

at java.sql.DriverManager.getConnection(DriverManager.java:582)

at java.sql.DriverManager.getConnection(DriverManager.java:185)

at consultalabtec.db.Conexao.getConnection(Conexao.java:61)

at consultalabtec.db.Conexao.<init>(Conexao.java:52)

at consultalabtec.bean.GerenciaConsulta.listaEquipamentos(GerenciaConsulta.java:50)

at consultalabtec.view.formConsultaTrocaPecas.formInternalFrameOpened(formConsultaTrocaPecas.java:179)

at consultalabtec.view.formConsultaTrocaPecas.access$000(formConsultaTrocaPecas.java:16)

at consultalabtec.view.formConsultaTrocaPecas$1.internalFrameOpened(formConsultaTrocaPecas.java:60)

at javax.swing.JInternalFrame.fireInternalFrameEvent(JInternalFrame.java:1552)

at javax.swing.JInternalFrame.show(JInternalFrame.java:1728)

at java.awt.Component.show(Component.java:1419)

at java.awt.Component.setVisible(Component.java:1372)

at javax.swing.JComponent.setVisible(JComponent.java:2610)

at consultalabtec.ConsultaLabtecView.abreFormularioConsultaTrocaPecas(ConsultaLabtecView.java:206)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.jdesktop.application.ApplicationAction.noProxyActionPerformed(ApplicationAction.java:662)

at org.jdesktop.application.ApplicationAction.actionPerformed(ApplicationAction.java:698)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.AbstractButton.doClick(AbstractButton.java:357)

at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1216)

at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1257)

at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)

at java.awt.Component.processMouseEvent(Component.java:6038)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5803)

at java.awt.Container.processEvent(Container.java:2058)

at java.awt.Component.dispatchEventImpl(Component.java:4410)

at java.awt.Container.dispatchEventImpl(Container.java:2116)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)

at java.awt.Container.dispatchEventImpl(Container.java:2102)

at java.awt.Window.dispatchEventImpl(Window.java:2429)

at java.awt.Component.dispatchEvent(Component.java:4240)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

</blockquote>

Alguém pode me ajudar?

Abraços e FELIZ ANO NOVO a todos.

11 Respostas

F

Olá
Verifique se o correto é 171.14.10.154 ou 172.24.10.254. No codigo esta um e no comentário está outro.

D

Olha esse oregon que vc ta usando é free?

A

Cara por coincidencia eu simulei erros no getconection hoje, alterando a String de conexao, tipo usuario,senha, hostname e apareceu esta mensagem por diversas vezes…sugiro vc verificar estes parametros ou testar a string completa em um metodo novo a parte…

jdbc:oracle:thin:@hostname:1521:user:password"; // servidor

verifica a string de conexao no arquivo tnsnames.ora q tem em qualquer estacao com o oracle client instalado
belêz…

L

O ip correto é mesmo “172.24.10.254”. Fui fazer um teste e esqueci-me de modificar.
Testei a mesma aplicação em outra máquina e continua com problemas!

O pior de tudo é que a utilizo a mesma url para consulta no iReport e não tenho problemas com isso. A senha e o usuário estão corretos, tenho certeza.

O erro que observei está ocorrendo é na linha 54 do código onde tem: con = DriverManager.getConnection(url, userName, password);
Só lembrando… O URL está certo, a senha e o nome de usuário também!

Como já havia utilizado a classe antes sem problemas nenhum (ou seja, o código está correto)… E testei em outra máquina desta vez e tive os mesmos problemas, estou achando que é algum bug da versão do java que estou utilizando. Estou utilizando o jre “jre1.6.0_03” e o jdk “jdk1.6.0_03”.

Alguém tem alguma classe que eu possa utilizar no lugar desta minha para testar? Houve alguma mudança na forma de conectar à uma base de dados?

Galera, agradeço a atenção. Aguardo alguma luz.

Abraços.

R

leandro,

Qual o arquivo jar que esta usando para obter o driver? Qual a versão do oracle?

L

Estou usando o driver encontrado em: http://download.oracle.com/otn/utilities_drivers/jdbc/9201/ojdbc14.jar
A versão do Oracle que utilizo é 9.2

Obrigado.

A

Leandro eu continuo afirmando q o teu problema esta na string de conexao nao é bug, ou seja Host name,user, senha e porta…eu digo isso pois hoje estava fussando no meu metodo (alterando o hostname=IP, porta, etc) e apareceu a mesma msg…vc nao precisa obrigatoriamente colocar o IP, vc pode colocar o host do server por exemplo, por isso verifica o tnsnames.ora abrindo com o bloco de notas…localiza ele…e abre…verific o service name…

R

Leandro,

fiz testes com esse código que você apresentou, utilizando o mesmo driver, com uma única diferença, a versão do oracle, estou utilizando a 10g, contudo o amigo Alex parece está certo, o erro ocorre quando você aponta para um host errado por exemplo, verifique se o host com o oracle não está com firewall, ou o serviço desligado, ou ainda se o ip configurado realmente seja esse.

espero ter ajudado.

L

Pessoal, o erro continua!!!

Conferi a URL, e está certa! Utilizo a mesma URL no iReport e não há problema algum. O nome de usuário e senha estão corretos também.

O tnsnames.ora acredito que esteja correto
O IP está correto!

Como estou utilizando o JDK 6, tentei inclusive o driver ojdbc6 que é o mais atual. O erro foi o mesmo!

Agradeço a atenção de todos.

Se alguém tiver mais alguma sugestão, agradeço.

Abraços.

B

Ja tive o mesmo erro que você. Estava usando java 6 e netbeans como IDE. Sua sitaçao parece um pouco com a minha pq vc tambem ta usando classes swing.

É o seguinte, nao sei porque acontecia esse problema comigo quando eu chamava o metodo pra pegar a conexao com o banco associado a um evento de um objeto swing. Pois quando eu colocava o codigo try{ Class.forName("oracle.jdbc.driver.OracleDriver"); DriverManager.getConnection(url, user, senha); }catch(Exception ex){ ex.printStackTrace(); }
dentro da classe Principal no main antes da chamada do metodo que carregava a app swing funcionava, no entanto quando eu colocava depois que a tela carregava nao funcionava.
Não sei porque , mas depois que eu coloquei uma primeia chamada de teste no main como acima funcionou o resto das chamadas de conexao com o banco. Até hoje me pergunto porque isso acontecia. Deve ser algum bug ou da ide ou do driver mesmo.

F

Ola amigo

Segue um exemplo abaixo simples de conexao com banco.

import java.sql.*;

public class Conexao

{

public static Connection con = null;

public static Statement  stm = null;

public ResultSet         rs;
public static void main(String args[]) 
{
    try
    {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String URL = "jdbc:oracle:thin:user/senha@localhost:1521:BANCO"; 
        con = DriverManager.getConnection(URL);
        stm = con.createStatement();
    }
    catch (Throwable erro)
    {
        System.out.println("ERRO : "+erro.getMessage());
    }
}

}

Criado 2 de janeiro de 2008
Ultima resposta 3 de dez. de 2008
Respostas 11
Participantes 7