Problema com a biblioteca oracle

22 respostas
M

Olá!

Estou tendo problemas em estabelecer uma conexão com um banco de dados Oracle. Utilizo o Eclipse (versão 3.0.2) e o jre (versão 1.5.0_06) e o erro ocorre na seguinte linha:

Class.forName(“oracle.jdbc.driver.OracleDriver”);

Também  tentei utilizar o seguinte:

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

Nesse último a linha fica sublinhada em vermelho indicando o erro "oracle cannot be resolved or is not a type".
 Eu imagino que esteja faltando alguma biblioteca, mas como esse é meu primeiro trabalho com Java não sei como faço para disponibilizar essa biblioteca para o projeto.
 Tentei colocar no início do código um import assim:

 import oracle.jdbc.driver.*;

 Mas, a palavra oracle também fica sublinhada em vermelho com o erro "The import oracle cannot be resolved".
 Alguém poderia me ajudar, por favor?

22 Respostas

Pedrosa

Vc já adicionou o ojdbc14.jar no classpath da sua aplicação?

M

Ainda não, como faço isso?

Pedrosa

Vc precisa baixar essa biblioteca no site da Oracle, como esta usando o Eclipse adicione clicando com o botão direito em cima do projeto,
Buld Path -> Add External Archives e selecione o jar do local onde vc baixou o arquivo e pronto.

M
Obrigada pela ajuda. :) 
 Quando clico com o botao direito no projeto, não existe a opção Buld Path. O mais próximo que encontrei foi "Import...", que me oferece algumas opções, entre elas "External Features". Será essa a opção que tenho q escolher?
Pedrosa

Acho que a versão do seu Eclipse não tem essa opção, mas vc precisa colocar esse jar no seu diretorio lib.

M
Fiz o download do arquivo ojdbc14.jar mas nao sei para qual diretorio lib copiar. No diretorio do Eclipse, encontrei uma pasta plugins, com varias outras pastas dentro e varias delas possuem uma pasta lib. Ou será q eu tenho q copiar para a pasta lib do JRE?
Pedrosa

Deve conter na pasta lib do seu projeto, esse projeto é WEB ou Desktop?

andrik

Olá mvg

vc pode fazer o seguinte, dentro da pasta do seu projeto vc pode criar uma pasta lib, conforme o exemplo

Meuprojeto
.classpath
.cvsignore
.project
src
MinhaClasse.java
bin
MinhaClasse.class
lib
ojdbc14.jar

Depois disso vc clica nas propriedados do projeto e ele vai abrir uma janela, aí vc escolhe a opção Build Path, clica na aba Libraries e depois clica em Add Jars e localiza o arquivo dentro do seu projeto dá um Ok e pronto

qualquer coisa posta ae

[]'s

M
Maravilha! Consegui instalar a biblioteca. Obrigada pela ajuda! Agora estou com outro problema, não estou conseguindo conectar com o banco. O erro ocorre na seguinte linha:

Connection conn = DriverManager.getConnection
(“jdbc:oracle:thin@(description=(address=(host=meuhost)(protocol=tcp)(port=1521))(connect_data=(sid=CWOracle)(server=dedicater)))” , “user”, “senha”);

Vou tentar algumas opções por aqui, mas qualquer ajuda seria ótimo tambem. :)
Pedrosa

Tente assim:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class ConnectionFactory {
	private static final String url = "jdbc:oracle:thin:@ip:porta:instancia";
	private static final String driver = "oracle.jdbc.driver.OracleDriver";
	private static final String usuario = "user";
	private static final String senha = "password";
	
	public static Connection getConnection() throws SQLException {
		try {
			Class.forName(driver);
			return DriverManager.getConnection(url, usuario, senha);
		} catch (ClassNotFoundException e) {
			throw new SQLException(e.getMessage());
		}
	}
}
M
Você sabe como eu faço para descobrir o IP do Banco, porque eu já acessei esse banco como client em outro projeto (nesse caso em ASP) e a string de conexão era algo tipo:

PROVIDER=MSDAORA.1;DATA SOURCE=SOURCE.COM;USER ID=USER;PASSWORD=PASS

Suponho que era usado Ole DB nesse projeto em ASP, mas agora não sei como encontrar o IP para usar no exemplo de código que vc me passou. 
 Mil desculpas, mas ainda estou aprendendo e obrigada pela ajuda.
M
Oh-oh... quando eu tento rodar o MeuPrograma.class pelo JRE dá erro: java.lang.ClassNotFoundException: oracle.jdbc.driver.Oracledriver.
 Vou ter que copiar o .jar para algum lugar do JRE? Já tentei criar uma pasta bin dentro do diretório Java e copiar o .jar lá, mas não funcionou. XD
Pedrosa

Para descobrir o ip do bd se vc estiver na mesma rede desse servidor de um ping nele, entre no cmd e digite esse comando:

ping nomedamaquina

Esse problema que esta acontecendo é de ClassPath esse jar do Oracle como ja foi falado precisa estar na pasta lib do seu projeto, vc não esta rodando pelo Eclipse?

Mais detalhes sobre ClassPath:

http://www.guj.com.br/java.tutorial.artigo.108.1.guj

M
Estou rodando pelo Eclipse inicialmente e pelo Eclipse está funcionando sem problemas, ele parou de apresentar erros depois que eu adicionei o .jar ao projeto, após tê-lo salvo no diretório lib que criei na pasta do projeto.
 Mas, como nessa máquina que estou desenvolvendo não tenho o client do Oracle, estou testando numa outra máquina, que não tem o Eclipse, apenas o JRE. Preciso fazer o programa rodar nessa outra máquina também, copiei o MeuPrograma.class para o diretorio C:\Arquivos de Programas\Java e estou executando usando o seguinte comando: java -cp . MeuPrograma.
 Mas, ao que parece, o JRE dessa outra máquina não tem a classe do oracle que eu preciso. 
 Quanto ao IP, vou testar assim que conseguir fazer o programa funcionar nessa outra maquina. ;)
Pedrosa

Vc não precisa ter o client do Oracle instalado, com essa classe vc pode testar qualquer comando pelo Eclipse e ver o resultado no console.

Exemplo de Select

public class TesteConexao {
	public static void main(String[] args) {
		try {
			Connection con = ConnectionFactory.getConnection();
	
			String query = "SELECT p.estado, COUNT(p.estado) as qtde FROM pessoa_has_certificacao phc "
				+ "INNER JOIN certificacao c ON c.idCertificacao = phc.FK_idCertificacao "
				+ "INNER JOIN pessoa p ON p.idPessoa = phc.FK_idPessoa "
				+ "GROUP BY p.estado";
			
			PreparedStatement stmt = con.prepareStatement(query);
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				System.out.println("estado aa" + rs.getString(1));
				System.out.println("quantidade xx " + rs.getInt(2));
			}
		
		}catch (Exception e) {
			e.printStackTrace();
		}	
	
	}

}
M
Legal! Instalei um client do Oracle na minha máquina e estou conseguindo fazer a conexão pelo banco perfeitamente no Eclipse. 
 Porém, "e sempre tem um porém", usando o comando para rodar o MeuPrograma.class no diretório Java continua sem funcionar. O que será que preciso fazer para a biblioteca oracle ser reconhecida pelo JRE?
Pedrosa

Para rodar sua aplicação de outra maquina gere um jar executável pelo Eclipse:

1 Crie um diretorio META-INF no seu projeto com um arquivo chamado manifest.mf com esse conteudo:

Manifest-Version: 1.0
Class-Path: lib/ojdbc14.jar
Main-Class: br.com.xx.SuaClasseMain

2 Clique com botão direito no seu projeto -> Export -> Jar File ->Escolha onde vai ser exportado -> Next ->Escolha a opção Use existing manisfest from workspace.

3 Abra seu aplicativo dando dois cliks nesse jar, a pasta lib precisa estar no mesmo lugar do jar.

M
Ok! Exportei o MeuPrograma.jar como vc falou. Coloquei a pasta lib (que atualmente só tem o ojdbc14.jar dentro) na mesma pasta do MeuPrograma.jar.
 Mas, quando clico duas vezes no MeuPrograma.jar recebo uma mensagem de erro dizendo "Could not find the main class. Program will exit".
 E agora? Obrigada pela paciencia. :)
Pedrosa

Vc criou o arquivo manifest.mf dentro de META-INF?

Nesse Main-Class deve conter a classe que tem o método main do programa, sua classe possui esse main?

Manifest-Version: 1.0
Class-Path: lib/ojdbc14.jar
Main-Class: br.com.xx.SuaClasseMain
M
Oi de novo, mais um dia de trabalho e eu lutando com esse Java. :D
 Mas estamos progredindo, pelo menos no Eclipse tudo está 100%.
 Quanto ao manifest.mf eu criei ele sim, dentro da pasta META-INF, dentro do diretorio do projeto. O conteúdo dele é exatamente esse (por sinal, não entendo o que significa o "br.com.xx.":

Manifest-Version: 1.0
Class-Path: lib/ojdbc14.jar
Main-Class: br.com.xx.Gerador

Esse arquivo Gerador.java é onde está a classe main, ele começa assim:

import java.io.*;
(mais alguns imports)

public class Gerador{

public static void main (String argv []){

(…)

Será que estou deixando de escolher alguma opção na hora de gerar o .jar?
Pedrosa

Esse br.com.xx é o pacote que pertence sua classe, caso não tenha coloque somente o nome da classe.

M
Funcionou! Viva! :D
 Valeu mesmo pela ajuda! Ótimo saber que tem gente por aqui disposta a dar uma mão aos iniciantes em Java. :)
Criado 2 de maio de 2006
Ultima resposta 4 de mai. de 2006
Respostas 22
Participantes 3