conexão com oracle

25 respostas
L

pessoal…num sei que arquivo devo colocar no meu path para conectar ao banco oracle???

esto usando esses dois:
ojdbc14.jar e nls_charset12.jar
é isso?

meu código tá assim:

package dboracle;

import java.sql.*; 

class JdbcTest { 
  public static void main (String args []) throws SQLException { 
 // Load Oracle driver
 DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
     
 // Connect to the local database
 Connection conn = 
 DriverManager.getConnection ("jdbc:oracle:oci8:banco", "usuario", "senha");

 // Query the employee names 
 Statement stmt = conn.createStatement (); 
 ResultSet rset = stmt.executeQuery ("select * from tabela");

 // Print the name out 
 while (rset.next ())
      System.out.println (rset.getString (1));
  } 
}

25 Respostas

R

tente usar isso no lugar.

Class.forName("oracle.jdbc.OracleDriver");
N

Que Oracle vc está usando? Que driver vc quer utilizar para fazer a conexão?

O driver que vc está tentando utilizar é o Oracle Thin, e a connection string é a para conexão com o driver OCI.

Essa é a connection string q eu uso em casa para conectar ao oracle 10g XE, com o driver Oracle Thin:

jdbc:oracle:thin:@localhost:1521:xe

É isso ae :smiley:

[editado]desabilitando smiles… a connection string ficou cheia de carinhas[/editado]

L

neófito:
Que Oracle vc está usando? Que driver vc quer utilizar para fazer a conexão?

O driver que vc está tentando utilizar é o Oracle Thin, e a connection string é a para conexão com o driver OCI.

Essa é a connection string q eu uso em casa para conectar ao oracle 10g XE, com o driver Oracle Thin:

jdbc:oracle:thin:@localhost:1521:xe

É isso ae

mas se eu for fazer a conexão para o drive OCI, que arquivo devo usar???

L

O banco é o Oracle 920

Tô recebendo essa exception:

Exception in thread "main" java.lang.UnsatisfiedLinkError: free_c_state
	at oracle.jdbc.oci8.OCIDBAccess.free_c_state(Native Method)
	at oracle.jdbc.oci8.OCIDBAccess.logoff(OCIDBAccess.java:619)
	at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:431)
	at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:536)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:328)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at dboracle.JdbcTest.main(JdbcTest.java:12)
N

Então, o arquivo q vc parece ter ( ojdbc14.jar) é o que contém o driver Oracle Thin, então sugiro q vc tente fazer a conexão com ele mesmo.

De qualquer forma, se vc tem um oracle 9i, para usar o driver OCI a connection string deveria ser algo como

"jdbc:oracle:oci:banco"

e não

"jdbc:oracle:oci8:banco"

(o driver oci8 é para oracle 8)

Tente usar

jdbc:oracle:thin:host:sid

onde “sid” é o System Identifier do database. O sid pode ser encontrado em um arquivo chamado “tnsnames.ora”, que fica em uma das pastas de instalçao do oracle.

L

Então…agora entendi o que vc disse, mas meu problema é na hora de carregar o drive, entretanto, acho que eu ia ter esse problema mais tarde eheheh…

N

Ah, eu estive dando uma olhada nas documentações q eu tenho aqui e fiquei mais confuso ainda… olha só, para vc conectar usando o driver Oracle Thin, é daquele jeito lá que eu mostrei, mas para conectar com o driver OCI não posso te dizer pq nunca usei…

N

Então, olha isso aqui

http://w2.syronex.com/jmr/edu/db/oracle-and-java

Parece que para usar o driver OCI vc tem que ter alguma coisa da oracle instalada na sua máquina, já que esse driver não é 100% java (ele usa código nativo para se comunicar com o oracle - JNI).

N

Mais uma referência (essa é das boas):

http://download-west.oracle.com/docs/cd/B10501_01/java.920/a96654/toc.htm

É isso ae :wink:

L

Então consegui com o thin mesmo, mas o lance era um arquivo que eu tinha que por no classpath peguei ele aqui:

http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.html

o arquivo é o ocrs12.zip, mas pra por ele no classpath remonei ele para ocrs12.jar e funcionou....

então para registro e futuras dúvidas, meu classpath tem:
ojdbc14.jar e ocrs14.jar

minha classe

package dboracle;

import java.sql.*;

class JdbcTest {
	public static void main(String args[]) throws SQLException {

		// Load Oracle driver
		DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
		
		// Connect to the local database
		Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@o endereço Ip do banco:1521:nome do banco",
				"usuário", "senha");

		// Query the employee names
		Statement stmt = conn.createStatement();
		ResultSet rset = stmt.executeQuery("select * from tabela");

		// Print the name out
		while (rset.next())
			System.out.println(rset.getString(1));
	}
}
P

De qualquer forma, se vc tem um oracle 9i, para usar o driver OCI a connection string deveria ser algo como
Code:

“jdbc:oracle:oci:banco”

e não
Code:

“jdbc:oracle:oci8:banco”

(o driver oci8 é para oracle 8)

Tente usar
Code:

jdbc:oracle:thin:host:sid

E no 10g xe, como devo utilizar ???

jdbc:oracle:thin:host:sid

ou

jdbc:oracle:oci:banco

???

vlw !

O

PadrE:
E no 10g xe, como devo utilizar ???

jdbc:oracle:thin:host:sid

ou

jdbc:oracle:oci:banco

???

vlw !

Não é a versão do Oracle Server (8i, 9i 10g, 10g XE, Personal, etc) que vai determinar qual tipo de driver utilizar. Todas as versões suportam tanto conexão com client thin como OCI. Se onde você for rodar o seu programa não tiver um “Oracle client” (instalação de umas libs em codigo nativo de cada plataforma), use sempre o thin. Só use drive OCI em sistemas que necessitem de performance ou que rodem no Oracle IAS, pois só com este drive é possível usar de maneira correta um Oracle RAC.

Resumindo: use sempre o client thin. Só use OCI se for Oracle IAS ou o projeto exigir.

P

oyama,

vlw os exclarecimentos… vou colocar tudo com thin no projeto e ver se ocorre algum problema…

Se vc souber algum material q fale sobre essas diferenças de conexão eu agradeceria… justamente para ver se o projeto vai mesmo precisar usar OCI ou mesmo para que eu veja qual a melhor conexão no meu caso…

Qlqr problema volto a postar e tb coloco as conslusões sobre o problema…

vlw !

P

Bom… não sei como fazer a conexão via OCI com o oracle 10g xe local…
=[ Se alguem souber de sobre algum tutorial, agradeço…

Para solucionar meu problema, acabei alterando a conexão OCI para Thin… o que deu certo…

Abaixo alguns link’s sobre o assunto… e tb sobre qual a melhor forma de Conexão… OCI vs Thin

http://www.theserverside.com/discussions/thread.tss?thread_id=4891#15342
http://forum.java.sun.com/thread.jspa?forumID=48&threadID=583618
http://download-east.oracle.com/docs/cd/B12037_01/appdev.101/b10779/oci01int.htm

Fui !

O

PadrE:

Se vc souber algum material q fale sobre essas diferenças de conexão eu agradeceria… justamente para ver se o projeto vai mesmo precisar usar OCI ou mesmo para que eu veja qual a melhor conexão no meu caso…
vlw !

Documentos do site de tecnologia da Oracle:
http://www.oracle.com/technology/docs/tech/java/sqlj_jdbc/index.html

Não sei se tem claramente quais são as vantagens e desvantagens de se usar um método ou outro, mas teoricamante via OCI deveria ser mais rápido. A única vez que tivemos real necessidade de usar o drive OCI foi para conectar em um Oracle RAC no Oracle IAS 10g (parace que o balanceamneto de carga no IAS só funciona se for OCI).

P

Nossa… agora surgiu uma duvida que estou ate com medo !

o ORACLE RAC seria um banco em Cluster… ate ai tudo bem, pq uso o Espress e ele não da suporte a Cluster…

Agora,… um ORACLE IAS seria um banco ORACLE acessado via web… e o uso da OCI seria para controlar isso ??

Minha aplicação será acessada por um client, ou seja… tenho uma parte server, e a parte client… aoh falta eu ter q utilizar OCI e o Expressa não da suporte a isso… ai dancei … hehe

Bom… vou continuar tentando realizar a conexão OCI no 10g Express local… mas vou torcer para não precisar… ^^

O

PadrE:
Nossa… agora surgiu uma duvida que estou ate com medo !

o ORACLE RAC seria um banco em Cluster… ate ai tudo bem, pq uso o Espress e ele não da suporte a Cluster…


Certo.

Não. Oracle IAS é o Application Server da Oracle (equivalente ao JBoss, WebSphere da IBM, Weblogic da BEA, Glassfish, etc). Pode-se tanto usar OCI como thin para conectar do IAS a um banco Oracle. O recomendado é usar OCI.

PadrE:
Minha aplicação será acessada por um client, ou seja… tenho uma parte server, e a parte client… aoh falta eu ter q utilizar OCI e o Expressa não da suporte a isso… ai dancei … hehe

Bom… vou continuar tentando realizar a conexão OCI no 10g Express local… mas vou torcer para não precisar… ^^


De novo, esqueça conexão OCI. Use thin. Se você usa Oracle 10g Express dificilmente vai ter que usar OCI.

P

oyama,

Cara, valeu mesmo por tirar minha dúvidas… eu acabei convertendo tudo para thin mesmo… e até agora não tivemos problemas… hehe

Vlw !

“O Conhecimento o Libertará !”

T

Pessoal to tentando fazer o seguinte: logar com o usuario system, pra depois criar novos usuários…

Foi uma “missão” que o professor de BD deixou pra gente.

Usei o codigo abaixo, pra testar se conseguia entrar como “system”, só que aparece a seguinte mensagem:

java.sql.SQLException: Exceção de E/S: Invalid number format for port number

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)

at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:414)

at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:165)

at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)

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

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

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

at dboracle.JdbcTest.main(testando.java:12)

Exception in thread main

Codigo q usei:

package dboracle;

import java.sql.*;

class JdbcTest {
public static void main(String args[]) throws SQLException {

// Load Oracle driver   
    DriverManager.registerDriver(new oracle.jdbc.OracleDriver());   
       
    // Connect to the local database   
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:8080/apex/:ex",   
            "system", "12345");   

    // Query the employee names   
    Statement stmt = conn.createStatement();   
    ResultSet rset = stmt.executeQuery("select * from clientes");   

    // Print the name out   
    while (rset.next())   
        System.out.println(rset.getString(1));   
}

}

N

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/apex/:ex", "system", "12345");
Tente usar a porta 1521.
8)

T

neohacker:
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/apex/:ex", "system", "12345");
Tente usar a porta 1521.
8)

Eu acabei de fizer isso… mesmo assim valeu!!! :lol:

Só peço um favor, eu consegui criar usuário, mas queria criar uma telinha pra isso… to apanhando. To mexendo no Jcreator, ele não é bom pra fazer “parte gráfica”?

Se alguem tiver um código pra criar usuario com uma tela “grafica” com campos “nome” e “senha” e botão “ok”, ficarei agradecido.
flws

M

minha classe contstante é essa:

public class Constante {

public final static String DRIVER = "oracle.jdbc.driver.OracleDriver";
public final static String URL = "jdbc:oracle:thin:@xvr60:1521:oravrd02";
public final static String USER = "usuario";
public final static String PASSWORD = "senha";

public Constante() {
}

}

Só que tenho esse erro:

Erro: Exceção de E/S: The Network Adapter could not establish the connection

Vocês sabem me dizer o que eu estou fazendo de errado? Eu baixei o ojdbc14.jar do site da oracle
Eu uso o oracle 10g, estou na minha máquina, tentando acessar um servidor no meu serviço, a xvr60, como mostrado acima.

Agradeço qualquer ajuda!!!

O

Este erro refere-se a problema de conexão (rede). Podem ser vários fatores:

  • Oracle fora do ar
  • Listener do Oracle fora do ar
  • Porta errada
  • Firewall
  • DNS
  • etc…

Tente verificar estes problemas sem usar o seu programa (telnet, ping, Squirrel, etc)…

M

em casa no note funciona, mas só depois que eu coloquei o drive da oracle, o .jar dentro da pasta web-inf/lib.
Mas aqui no meu serviço não, não sei se tem que ser um drive específico, pois no note o banco é local, aqui eu acesso o servidor. As configurações estão certas… Não sei o que pode ser.

Obrigada

O

Nós, menos ainda…

musquita_zzz:
em casa no note funciona, mas só depois que eu coloquei o drive da oracle, o .jar dentro da pasta web-inf/lib.
Mas aqui no meu serviço não, não sei se tem que ser um drive específico, pois no note o banco é local, aqui eu acesso o servidor. As configurações estão certas…

Isto reforça o que eu disse anteriormente: o problema não é do seu programa, mas de infra-estrutura (rede, servidor, etc)

Você tem experiência com redes/firewall/DNS/administração Oracle? Consegue testar se dá sua máquina você consegue acessar a porta especificada? Tentou testar via número IP ao invés do nome do servidor? O servidor está na mesma rede interna da sua máquina? É Windows (XP, Vista, etc), Linux, outro Unix o servidor e a sua máquina? Outra aplicação na sua máquina consegue acessar o servidor Oracle? Tentou acessar aquela URL de conexão usando algum outro software do tipo do Squirrel? Sabe o que significa cada um dos parâmetros da URL de conexão (server:port:instancia)?

Criado 11 de agosto de 2006
Ultima resposta 13 de jun. de 2008
Respostas 25
Participantes 8