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)
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.
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…
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).
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
[code]
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));
}
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.
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…
[quote=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 ![/quote]
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).
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… ^^
[quote=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…[/quote]
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.
[quote=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… ^^[/quote]
De novo, esqueça conexão OCI. Use thin. Se você usa Oracle 10g Express dificilmente vai ter que usar OCI.
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));
}