Conectar com banco Oracle e manipular dados do banco...[RESOLVIDO]

Ola estou com um probleminha…

Tenho um projeto chamado Conexao onde nele ha uma classe chamada ConectaNat a qual conecta com o banco Oracle 10g…

Abaixo o código da mesma:

package conexao;


import java.io.*;
import java.sql.*;
import oracle.jdbc.driver.*;

 /**
 * Classe de teste de acesso a Banco de Dados atraves de JDBC utilizando
 um drive nativo.
 */
 class ConectaNat {
    
     
     public static void main (String args[]) {

         String url   = "jdbc:oracle:thin:@localhost:1521:binary";
                                      //Protocolo:Drive:LocalizacaoDoBD
 /* Na linha de comando acima, deve ser substituído as variaveis <host
 name>, <porta> e <sid> pelas
    configurações de seu servidor oracle */

        
         String query=("select sysdate from dual");
         

         try {
             Class.forName("oracle.jdbc.driver.OracleDriver");
                                                  //Carrega o drive Nativo

             Connection con = DriverManager.getConnection(url, "tiago","oracle");
 /* Sintaxe :DriverManager.getConnection(<caminho do host>, <usuario>,
 <password>*/
             DatabaseMetaData dma = con.getMetaData ();
             System.out.println("\nConnected to " + dma.getURL());
             System.out.println("Driver       " + dma.getDriverName());
             System.out.println("Version      " + dma.getDriverVersion());
             System.out.println("");

             Statement stmt = con.createStatement ();
                                             // Abre a coneccao com o BD
          
             ResultSet rs = stmt.executeQuery (query);  // Executa a query SQL

             //Imprime o resultado da query SQL
             while(rs.next()) {
                 System.out.println(rs.getString(1));
             }

             rs.close();
             stmt.close();
             con.close();
           
         } catch (SQLException ex) {

             System.out.println ("\n*** SQLException caught ***\n");
             while (ex != null) {
                 System.out.println ("SQLState: " + ex.getSQLState ());
                 System.out.println ("Message:  " + ex.getMessage ());
                 System.out.println ("Vendor:   " + ex.getErrorCode ());
                 ex = ex.getNextException ();
                 System.out.println ("");
             }

         } catch (java.lang.Exception ex) {
             ex.printStackTrace ();
         }

     }

 }

Até ai tranquilo…

Agora eu gostaria de saber como crio uma classe onde eu digito a consulta sql e ela me retórne os dados…

Ja tentei de varias formas acessar a classe ConectaNat trocando o select da QUERY porem não retorna nada…

Agradeço desde ja.

uai… é soh criar classse com um metodo que faz isso tudo ai mas q recebe como parametro a query pra consulta

qual o problema com isso?

Bom… esse seu código tá meio estranho… vc já chama o driver, cria a conexão e já faz uma consulta… vamos dividir isso ^^ (use o que a OO tem pra te oferecer rapaz)

Use uma abordagem um pouco diferente…
cria uma classe SOMENTE para obter a conexão com o banco de dados…

o código dessa classe ficaria mais ou menos assim

public class ConnectionManager{
   private static final URL= ""jdbc:oracle:thin:@ip:1521:xe"";
   private static final USER= "tiago";
   private static final PASSWORD= "oracle";

   public static Connection getConexao() throws SQLException{
     Connection conn = null; 
     try{
         Class.forName("oracle.jdbc.driver.OracleDriver");
         conn = DriverManager.getConnection(URL, USER,PASSWORD);
      } catch(SQLException ex){
          System.err.println("Erro ao obter a conexão com o banco. Exception: " + ex.getMessage());
      }
    return conn;
   }

   //Aqui, você faz métodos para fechar a Connection, o Statement e o ResultSet
}

Aí, em uma outra classe, você implementa a sua solução de negócio. Ou seja, um método que obtém a conexão através da ConnectionManager, executa o select e, depois, manda a Connection, o Statement e o ResultSet para a ConnectionManager fechá-los.

Caso você queira usar uma abordagem melhor, crie uma interface chamada NatDAO, por exemplo, onde você definirá todos os métodos que serão necessários para sua aplicação (no seu caso, o método do select)… aí, vc cria uma outra classe que implementa essa interface e sobrescreve o método que retorna o resultado do select…

Ou seja, a sua aplicação precisará conhecer apenas a interface NatDAO. E, através dela, você passará por parâmetro o select que você quer fazer (ou então, vc apenas faz a chamada do método caso o select já esteja pré-definido). E, pronto, é só vc curtir o retorno do método e utilizar como quiser os dados retornados pela sua consulta…

Espero ter ajudado de alguma forma…

Outra coisa, o seu while está com um problema… ^^

Quando você for pegar os dados de um ResultSet, você tem que passar para o método “getTipoDoDado” (ex: getString(), getInteger(), etc) o nome da coluna da sua tabela que tem o dado que você precisa.

Vamos imaginar que o seu resultSet contém os dados retornados de uma consulta à uma tabela com três campos “Nome(String), CPF(String) e idade(int)”

quando você for pegar esses dados, deverá fazer da seguinte maneira:

while(rs.next()) {  
   String nome = rs.getString("nome"); //a String passada como parâmetro deve ter o mesmo nome da coluna da sua tabela
   String cpf = rs.getString("cpf");
   int idade = rs.getInt("idade");

   System.out.println(nome);
   System.out.println(cpf);
   System.out.println(idade);
}  

gobbo Ja havia tentado criar direto porem nem o banco pegava meu select e nem me mandava nada de volta…

vtr.oliveira Consegui fazendo da sua maneira…

Muito Obrigado pela Ajuda… :smiley: :lol:

Até mais…

Opa… por nada cara…

Qualquer dúvida, posta ae…

E não esqueça de colocar “RESOLVIDO” no tópico ok?