Conexão Oracle com Java

11 respostas
W

Estou tentando fazer uma conexão Oracle - Java, a fim de criar aplicativos…

Mas acontece esse erro quando executo:

java.lang.arrayindexoutofboundsexception: 0
at oracle.jdbc.driver.oraclesql.main(oraclesql.java:1614)

Já inseri as jars (ojdbc14, e ojdbc14_g), no projeto, coloquei as variáveis no CLASSPATH, criei um ORACLE_HOME, mas nada… nadica de nada…

Alguém pode me ajudar?

11 Respostas

W

para ajudar a entender o problema, segue o código:

import java.sql.*;

import javax.swing.JOptionPane;

public class ConexaoOracle {

private String drv;
private String url;
private String user;
private String passwd;
private Connection conn;	
private Statement stmt;

public boolean conecta(){
	boolean result = true;						
	try {
		Class.forName(drv);
	    conn = DriverManager.getConnection(url, user, passwd);
		
	}catch(ClassNotFoundException erroClass) {
		mensagemErro(erroClass.getMessage());
		result = false;
	} catch(SQLException erroSQL) {
	    mensagemErro(erroSQL.getMessage());
	    result = false;
	  }
	  return result;
}

public void desconecta() {
	boolean result = true;
	
	try {
		conn.close();
	}catch(SQLException erroSql) {
		mensagemErro(erroSql.getMessage());
		result = false;
	}
}

public int regCount(String qry) {
	int result = 0;
	
	try {
		stmt = conn.createStatement();
		ResultSet rs = stmt.executeQuery(qry);
		rs.next();
		result = rs.getInt(1);
		stmt.close();
	}catch(SQLException sqlex) {
		mensagemErro(sqlex.getMessage());			
	}
	return result;
}	

public void getColumn(String qry, String[] reg) {
	try {
		Statement stmt = conn.createStatement();
		ResultSet rs = stmt.executeQuery(qry);
		rs.next();
		for(int i = 1; i <= reg.length; i++)
			reg[i - 1] = "" + rs.getString(i);
		stmt.close();
	}catch(SQLException sqlex) {
		mensagemErro(sqlex.getMessage());
	}
}

public void getColumn(String qry, String [][] reg, int regs ) {
	try {
		int lin = 0;
		stmt = conn.createStatement();
		ResultSet rs = stmt.executeQuery(qry);
		while(rs.next()) {
			for (int i = 0; i < regs; i ++) {
				reg[lin][i] = "" + rs.getString(i + 1);
			}
			lin ++;
		}
	}catch(SQLException sqlex) {
		mensagemErro(sqlex.getMessage());
	}	
}

public String getDrv() {
	return drv;
}

public void setUrl(String valor) {
	url = valor;
}

public void setUser(String valor) {
	user = valor;
}

public void setPasswd(String valor) {
	passwd = valor;
}

private void mensagemErro(String msg) {
	JOptionPane.showMessageDialog(null, msg, "Erro", JOptionPane.ERROR_MESSAGE);
}

}

Tchello

Cara, coloque o código sempre entre as tags code para facilitar a leitura.
Notei um grande uso de de arrays e matrizes, evite-os. São eles que estão gerando a exception pois está tentando acessar uma posição do array/matriz que não existe, dai um ArrayIndexOutOfBoundsException.
Faça um teste, apenas crie uma conexão com o bando, da forma como está feita, e execute um select comum, iterando no ResultSet e exibindo seu conteúdo. Isso tudo sem usar essa estratégia que adotou de arrays e matrizes.

W

Tchello,vc poderia me exemplificar sobre uma conexão oracle através do Class.forName()?

joede.fadel

De uma forma mais simples…
O Cass.forName é a classe do seu driver que é utilizada para realizar a conexão com o bd

public void conectar(String login, String senha) {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", login, senha);
            stDados = con.createStatement();
            System.err.println("conectou");
        } catch (ClassNotFoundException ex) { 
            ex.printStackTrace();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }
W

Joede, vou testar…

Olha, eu tenho os arquivos.jar: ojdbc6.jar(baixei do site da Oracle), ojdbc14.jar e ojdbc14_g.jar(Vieram com o meu SGBD).

Qual eu posso referenciar no meu projeto?

Valeu pela atenção!!!

joede.fadel

Vai depender da versão do java que você está utilizando:Diferenças entre classes12.jar, ojdbc14.jar, ojdbc5.jar e ojdbc6.jar

classes12.jar ? pra java 1.2 e 1.3

ojdbc14.jar ? para java 1.4

ojdbc5.jar ? pra java 1.5

ojdbc6.jar ? pra java 1.6

acesse http://leonardopucci.wordpress.com/2011/01/15/diferencas-entre-classes12-jar-ojdbc14-jar-ojdbc5-jar-e-ojdbc6-jar/ para ter mais informações

W

Joede

Eu tentei com ojdbc6, pois o meu jdk é 1.6

e dá esse erro: “ERROR: incorrect usage. OracleSql (-transition | <process_escapes> <convert_nchars> { } )”

Para efeito de informações

estou usando o Eclipse Helios, meu S.O é o Win 7!!!

será que isso pode estar relacionado a meu problema?

joede.fadel

Em que horas que ocorre esse erro?

W

Joede

Olha só, esse problema dá quando eu executo apliação…

mas acho que o problema tem a ver com o Eclipse, pois baixei o netbeans(para testar), coloquei o ojdbc6.jar no projeto, e deu certo!!! consegui conectar com o oracle, na IDE NetBeans.

Acho que é alguma coisa errada no meu Eclipse Helios.

vlw a atenção.

joede.fadel

O problema mais provável é como você importou do *.jar, pois um IDE não controla acesso aos dados a um banco. O netbeans ele trata de forma um pouco mais fácil a questão de importação de *.jar.

W

Eu coloquei o ojdbc.jar naquela pasta jdbc do oracle.

aí eu inseri na opção “Add External Jars”, disponibilizando o .jar no projeto(isso eu fiz no eclipse).

daí eu lançava: import java.sql.*; e poraí vai…

Fiquei com essa dúvida… Quando coloquei no NetBeans, não tive problemas…

Criado 1 de maio de 2011
Ultima resposta 6 de mai. de 2011
Respostas 11
Participantes 3