Erro na conexão com ORACLE

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:

[quote]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)
[/quote]
Alguém pode me ajudar?
Abraços e FELIZ ANO NOVO a todos.

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

Olha esse oregon que vc ta usando é free?

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…

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.

leandro,

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

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.

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…

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.

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.

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.

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());
    }
}

}