# java jdbc Datenbankanbindung oracle



## rical (20. Mai 2008)

Hallo,

ich möchte per jdbc Treiber auf eine oracle DB zugreifen und bekomme folgende 

Fehlermeldung:

```
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
        at oracle.jdbc.driver.T4C8TTIdty.marshal(T4C8TTIdty.java:465)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:329)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:474)
```

Mein Connection String sieht so aus:

```
DriverManager.getConnection("jdbc:oracle:thin:user/passwort@192.XXX.XXX.XX:1521:PRIM");
```

Ich habe JDK 1.6 und das ojdbc6.jar file eingefügt.
Was mache ich falsch? Kann es an den Rechten von user liegen(read only)?

Hinweis: Per Oracle Client kann ich auf die DB zugreifen. 

Gruß rical


----------



## zeja (20. Mai 2008)

Ich kenn mich damit nich aus, aber sollte es nicht so heißen?

jdbcracle:thin:user/passwort@//192.XXX.XXX.XX:1521/PRIM

Schau doch da mal rein:http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.htm

Weiterhin solltest du den DriverManager nicht verwenden sondern eine DataSource:
http://www.tutorials.de/forum/java-...tenbankzugriff-mit-springs-jdbc-template.html


----------



## rical (21. Mai 2008)

Hallo,
ich habe nun mit einer DataSource versucht und bekomm folgenden Fehler:

```
SCHWERWIEGEND: null
java.sql.SQLRecoverableException: I/O Exception:The Network Adapter could not establish the connection
        at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:101)
        at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:112)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:173)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:229)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:458)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:411)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:474)
        at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:275)
        at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:206)
```

Hier ist mein Code für die DataSource:

```
user = "user";
            password = "password";

            OracleDataSource ds = new OracleDataSource();
            ds.setURL("jdbc:oracle:thin:@//192.xxx.xxx.xx:1521:PRIM");
            ds.setPortNumber(1521);
            ds.setNetworkProtocol("TCP");
            ds.setDriverType("thin");
            ds.setDatabaseName("PRIM");

            conn = ds.getConnection(user, password);
```

Ist das so richtig?
Gruß rical


----------



## JonDow (21. Mai 2008)

Hi zeja,

Zu eins:
Die Lösung auf deine Frage sollte wie follgt aussehen.
jdbcracle:thin192.XXX.XXX.XX:1521:user/passwortRIM

Zu zwei:

Dir Fehlt meiner meinung nach der DB Treiber.
"oracle.jdbc.driver.OracleDriver"
Tipp Das könntest du dann auch in ein DS File auslagern da ist es besser zu Pflegen

Grüße JonDow


----------



## rical (21. Mai 2008)

Hallo,
deine Variante für 1. funktioniert leider nicht. Da kommt eine Fehlermeldung, dass er das Format "hostort:sid" haben möchte.
Ich habe es mit 

```
ds.setURL("jdbc:oracle:thin:user/password@192.xxx.xxx.xx:1521:PRIM");
```
probiert und da kommt folgende Fehlermeldung:

```
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
        at oracle.jdbc.driver.T4C8TTIdty.marshal(T4C8TTIdty.java:465)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:329)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:490)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:202)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:474)
        at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:275)
        at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:206)
        at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:156)
```

Zu 2. ich dachte bei einer DataSource muss man den Treiber nicht erst registrieren.

Gruß rical


----------



## zeja (21. Mai 2008)

@rical:

Es gibt doch Haufenweise Beispiele im Internet:
http://www.java2s.com/Code/Java/Database-SQL-JDBC/OracleDataSourceDemo.htm


----------



## rical (21. Mai 2008)

Hallo,
danke für den link. Ich habe sämtliche Beispiele pobiert und es kommt immer noch der selbe Fehler:

```
java.sql.SQLRecoverableException: I/O Exception: The Network Adapter could not establish the connection
```
Kann es sein, dass es nicht am code selber liegt sondern an der oracle DB?
Ich kann per Client aud die DB zugreifen. Ist es vielleicht notwendig Einstellungen an der DB/ am Server zu ändern?

Gruß rical


----------



## JonDow (21. Mai 2008)

Hi 

also hier ist ne beschreibun zu dem Fehler die musste mal durchgehn und schaun welcher Punkt bei dir zutrifft.

http://www.websina.com/bugzero/kb/oracle-connection.html

Grüße jon


----------

