NAS
NAS

[Oracle] DB-Connection

schmidt206

Commander
Registriert
Dez. 2007
Beiträge
2.062
Hey Folks,
first time with Oracle ;)
Ich versuche eine Verbindung zu einer DB herzustellen, mein Quellcode sieht wie folgend aus:

Code:
public class Connection
{
   public static void main(String argv[]) {

        Connection con;
        con = null;
        
                 try { 
        
             Class.forName("oracle.jdbc.driver.OracleDriver");         
             String usr = "FEO";
             String pw = "******";
             String url;
             url = "jdbc:oracle:thin:@139.27.100.184:1521:DBFEO2";
             con = (Connection)DriverManager.getConnection(url,usr,pw);
             System.out.println("Connected!");
             
                } catch (Exception e) {
             System.out.println(e);
             }
 
}
}
Als Fehlermeldung kommt:
C:\Programme\Java\jdk1.5.0_14\bin\javaw.exe -ojvm -classpath "C:\Dokumente und Einstellungen\azubi\Desktop\jdevstudiobase1013\jdev\mywork\Application1\Project1\classes;C:\Dokumente und Einstellungen\azubi\Desktop\jdevstudiobase1013\lib\ojdbc14.jar;C:\DevSuiteHome_1\jdev\mywork\Diplomarbeit_Bibliotheken" project1.Connection
java.lang.ClassCastException: oracle.jdbc.driver.T4CConnection
Process exited with exit code 0.
Hab schon gegooglet, aber bin nicht wirklich fündig geworden. Was heißt das? Will einfach nur die Verbindung aufbauen.
 
Der Fehler bedeutet, dass der Oracle JDBC treiber etwas dagegen hat, wenn du ihn einfach so auf deine eigene Klasse Connection castest.

Der Rückgabetyp von DriverManager.getConnection() ist doch vom Typ java.sql.Connection, der wird durch deine Klasse Connection überschrieben.
Also entweder java.sql.Connection con; und con = (java.sql.Connection)DriverManager.getConnection() oder deine Klasse umbenennen.
 
Argh, natürlich.

Deine erste Variante funktioniert. Nur aus Interesse: In was meinst du sollte ich denn meine Klasse umbenennen?
 
Mein Professor in Algorithmen und Datenstrukturen hat immer mnemonische Namen für Klassen vorgeschlagen. In deinem Fall wäre das z.B. MyOracleConnection.
 
Ah, ok :P

Kannst du mir vielleicht n kostenloses ebook auf Deutsch als oracle-Einführung empfehlen? Ich brauche erstmal so grundlegende Befehle, wie Abfragen von Inhalten etc.?
 
Danke für die Hilfe! Hat alles funktioniert.

Hab dazu jedoch nochmal ne Frage. Ich möchte eine Variable des Typ DATE (also "01.01.2008 00:00:00")
aus der Datenbank rausholen und in einen Java-Date-Typ umwandeln (wenn das überhaupt nötig ist) und dann ausgeben. Wie ist da der genaue Ablauf? Hab schon gegooglet, aber komm da nur noch mehr durcheinander.
 
Da kann ich dir den folgenden Link empfehlen: http://web.f4.fhtw-berlin.de/hartwig/JDBC/jdbc.html#Programmieren%20mit%20JDBC
Du schickst über deine Connection ein SQL Statement ab (SELECT ... FROM ... WHERE ...).
Da kommt dann ein ResultSet zurück (Entweder kein, ein oder mehrere Ergebnisdatensätze), durch dieses kannst du dich dann durchhangeln und den Wert abrufen, den du brauchst. Eventuell kann das ResultSet sogar den Datentyp DATE auf ein Java.DateTime auflösen.
 
Oh sorry, hätt ich vllt dazu sagen sollen. Das mit den Statements hab ich schon, funktioniert auch alles soweit. Nur gibts wohl Probleme mit dem Format von DATE, das wohl in der java.sql n anderes ist, als bei der java.util.
Naja, ich versuchs mal weiter. Dein Link sieht hilfreich aus. Danke dafür!
 
Du kannst den Wert, den du da bekommst, auch erstmal als String aufzeichnen, damit ist er erstmal sicher. Von dort kannst du dann auf ein DateTime casten bzw. parsen.
 
Dafür gibts doch den java.lang.DateTime Typen. Wenn du ganz sicher gehen willst, dann parst du den String aus der DB selbst in eine solche DateTime Variable.
 
Naja, das Datum formatiert er ja völlig richtig, folgendermaßen:

SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy | HH:mm:ss");
String dateString = df.format(date);
dd.MM.yyyy funktioniert wunderbar. jedoch zeigt er die Uhrzeit absolut falsch an. Könnte das vielleicht daran liegen, dass meine Variable "date" vom Typ "Date" die Uhrzeit aus der SQL-Spalte schon gar nicht mitübernimmt?
 
Korrekt, eine Date-Variable nimmt natürlich nur das Datum mit, die Uhrzeit wird vom SimpleDateFormat gefüllt, normalerweise mit 00:00:00.
Also doch besser einen String nehmen und den in ein DateTime parsen.
 
Ich habs jetzt mit Timestamp gemacht, funktioniert auch. Jedoch muss ich da morgen noch n bisschen was ändern. Evtl. melde ich mich nochmal :)
 
So, hier ein Auszug aus dem aktuellen Quelltext:

SimpleDateFormat df = new SimpleDateFormat("dd.MM.yyyy | hh:mm:ss");
java.sql.Timestamp date = null;
java.sql.Timestamp temporary_date = null;

while (rs_01.next())
{
int temp_0001 = rs_01.getInt("TEMP_0001");
date = rs_01.getTimestamp("DATI_RECORD_CREATE");

String date_formatted = df.format(date);
String temporary_date_formatted = df.format(temporary_date);

if (temporary_temp != 0 && temp_0001 - temporary_temp > 5)
{
int delta_t = temp_0001 - temporary_temp;
System.out.println("Delta T > 5°C! | Uhrzeit: " + date_formatted + " Temperatur: " + temp_0001 + "°C | Uhrzeit vorher: " + temporary_date_formatted + " Temperatur: " + temporary_temp + "°C " + "(Delta T = " + delta_t + "°C)");
}
Jetzt bekomme ich ne NullPointerException, weil ich natürlich an der fettgedruckten Stelle versuche, mit ner leeren Variable zu arbeiten. Lass ich diese komplett weg, funktioniert natürlich alles. Die Variable ist halt ne Temp-Variable und wird am Ende der Schleife gefüllt mit dem Wert aus 'date_formatted'.
 
Dann setz doch vor der Schleife das temporary_date auf date, dann sind die beiden Werte zwar gleich, aber gefüllt.
 
Ne, date ist ja vor der Schleife auch noch nicht gefüllt. Das passiert ja erst in der Schleife.
 
Da ist was Wahres dran.
Lösung: schreib hinter diese Zeile
Code:
date = rs_01.getTimestamp("DATI_RECORD_CREATE");
folgendes:
Code:
if (temporary_date == null) temporary_date = date;
Damit kannst du den ersten Durchlauf der Schleife abfangen, nach dem Durchlauf wird es ja auf immer auf date gesetzt.
 
Das ist ne gute Idee, wird sofort probiert!

EDIT: Super, funktioniert! Nur mit den Daten gibts jetzt grad n Problem, aber das krieg ich glaub ich alleine hin! Vielen Dank!
 
Zuletzt bearbeitet:
Zurück
Oben