Zum Inhalt springen

Datenbankanbindung bei swt?


Natriumarm

Empfohlene Beiträge

Hallo,

hier gleich noch ein Problem hinterher. Mein Projekt soll an eine Oracle Datenbank angebunden werden.

Die Klasse für die Anbindung wurde schon bei anderen Projekten getestet und funktioniert, nur bei meinem Projekt, bei dem die GUI mit swt erstellt wurde seltsamerweise nicht.

Brauch dringend Hilfe, weil ich die ganzen Oberflächen nicht wieder umstricken möchte.

MFG and so long

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also ich kann mir dein Problem gerade nicht richtig vorstellen. Es kann ja eigentlich nicht an der Oberfläche liegen.

Hast du die Geschäftslogik von der Benutzeroberfläche (Präsentationsschicht) getrennt?

Beschreibe dein Problem bitte ein bisschen genauer. Wird eine Liste nicht gefüllt? Wenns keine Webapplication ist dann kann doch recht leicht debugged werden. Wird ein Fehler geworfen?

Ein paar Codezeilen zur GUI wären nicht falsch.

Greeze Chris

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich hab erstmal eine Klasse, in der steht nur der Code für die Gui. In einer zweiten Klasse habe ich die Datenbank Anbindung geschrieben.

Diese Klasse funktioniert in anderen Projekten - also erstmal rein weg das verbinden zur Datenbank. Aber bei meinem aktuellen Programm nicht, wir haben das vorhin eine Stunde lang mit den anderen Projekten verglichen was anders sein könnte (imports, Libs, Methodenaufrufe) und der einzigste Unterschied, der uns aufgefallen ist - ist das die Oberfläche mit swt gestaltet wurde.

Daher unsere Vermutung, das swt ein etwas anderes Handling mit einer Datenbankanbindung (Oracle) benötigt.

Sry wenn die Beschreibung nicht so rüber kommt, weiß nicht wie ich das anders schreiben soll :old

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

dann wäre noch interessant, was nicht geht. Exception, Verhalten, ...

"Geht nicht" ist keine Fehlermeldung!

Vermutlich habt Ihr entweder eine Bibliothek nicht richtig gesetzt (z.B. JDBC-Treiber), oder Du erwartest, das in der SWT Oberfläche etwas passiert, ohne das Du es angegeben hast. :)

Erst mal brauchen wir genauere Infos.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

moin moin,

hier mal die komplette Consolenausgabe.

WAV0052E Invocation Target Exception creating Gui.Hauptfenster

java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.eclipse.ve.internal.java.vce.launcher.remotevm.SWTLauncher.runShell(SWTLauncher.java:467)

at org.eclipse.ve.internal.java.vce.launcher.remotevm.SWTLauncher.launch(SWTLauncher.java:181)

at org.eclipse.ve.internal.java.vce.launcher.remotevm.JavaBeansLauncher.main(JavaBeansLauncher.java:70)

Caused by: java.lang.UnsatisfiedLinkError: no ocijdbc10 in java.library.path

at java.lang.ClassLoader.loadLibrary(Unknown Source)

at java.lang.Runtime.loadLibrary0(Unknown Source)

at java.lang.System.loadLibrary(Unknown Source)

at oracle.jdbc.driver.T2CConnection$1.run(T2CConnection.java:3139)

at java.security.AccessController.doPrivileged(Native Method)

at oracle.jdbc.driver.T2CConnection.loadNativeLibrary(T2CConnection.java:3135)

at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:221)

at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:420)

at oracle.jdbc.driver.T2CConnection.<init>(T2CConnection.java:132)

at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:78)

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

at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:297)

at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:221)

at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:165)

at Logik.DB_Verbindung.OpenConnection(DB_Verbindung.java:133)

at Logik.DB_Verbindung.<init>(DB_Verbindung.java:29)

at Logik.DB_Verbindung.getInstance(DB_Verbindung.java:104)

at Gui.Hauptfenster.createSShell(Hauptfenster.java:176)

Der rotmarkierte Treiber kann eigentlich nicht der Fehler sein, da wir die Treiber / Bibliotheken im Build Path drin haben.

Da ich in Java noch nicht so fit bin, hab ich auch noch nix weiter geschrieben, das Felder auf der Gui gefüllt werden sollen, sondern rein weg die Datenbankanbindung erstmal klappen soll. Hier noch die Klasse für die Datenbankverbindung (die wie geagt in anderen nicht-swt projekten funktioniert):

package Logik;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Calendar;

import oracle.jdbc.pool.OracleDataSource;

public class DB_Verbindung {

private Connection conn = null;

private static DB_Verbindung Instance = null;

private int Queries = 0;

private Statement SQLStatement = null;

private DB_Verbindung() {

OpenConnection();

}

/**

* <H3>getInstance</H3>

*

* <PRE></PRE>

*

* <DL>

* <DD> Gibt eine Inszanz dieser Klasse zurueck

* <P>

*

* @return - Die Inszanz dieser Klasse </DD>

* </DL>

* <HR>

*

* @uml.property name="instance"

*/

public static DB_Verbindung getInstance() {

if (Instance == null)

Instance = new DB_Verbindung();

return Instance;

}

private void OpenConnection() {

try {

if (conn == null || conn.isClosed()) {

try {

System.out.println("Stelle neue DB Verbindung her...");

// Oracle Treiber registrieren

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

// Neue DataSource anlegen

OracleDataSource ods = new OracleDataSource();

// User angeben

ods.setUser("user");

// Pass angeben

ods.setPassword("passwort");

// URL angeben

ods.setURL("jdbc:oracle:oci:@DB");

// Neue Connection aufbauen

conn = ods.getConnection();

SQLStatement = conn.createStatement(

ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY,

ResultSet.CLOSE_CURSORS_AT_COMMIT);

System.out.println("Verbindung hergestellt!");

} catch (Exception ex) {

ex.printStackTrace();

}

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

ich habe mir Deinen Quellcode jetzt nicht angesehen, da ich nicht denke, das es daran liegt. Du könntest beim nächsten Mal Code-Tags verwenden, dann ist er besser lesbar.

Ich denke, es liegt genau an der Fehlermeldung. Er kann die genannte Bibliothek nicht finden. Wie habt Ihr sie denn integriert? Wenn es eine native Bibliothek ist (so sieht es für mich aus), dann solltest Du diese z.B. mit -Djava.library.path=<PFAD_ZUR_BIBLIOTHEK> als VM-Argument einbinden können.

Schöne Grüße,

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

setz Dich bitte noch mal mit dem Unterschied zwischen einer Java Bibliothek (in der Regel ein Jar-File) und einer nativen Systembibliothek (z.B. .dll oder .so) auseinander.

Der Fehler klingt ein wenig danach, als müsstest Du eine *System*-Bibliothek in den Pfad (auch hier bitte den Unterschied zum Classpath beachten) eingetragen werden. Schau Dir auch noch mal meinen letzten Post an, dort steht das wahrscheinlich richtige VM-Argument (wenn Du unbedingt aus Eclipse starten willst, zweiter Reiter im Run-Dialog).

Versuche, das Vorgehen ohne IDE zu verstehen, dann kannst Du das Werkzeug vernünftig nutzen.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

da Du die OCI treiber verwendest, braucht du zwingen eine Oracle Client installation auf deinem Rechner. Alternativ kannst auch den thin Treiber verwenden (statt oci thin).

Möchtest Du in deinem ResultSet auch rückwärts lesen? Falls nicht, dann solltest Du nicht ResultSet.TYPE_SCROLL_SENSITIVE verwenden. Das hat durchaus Auswirkungen auf die Performance. Eigentlich brauchst hier überhaupt keinen Parameter verwenden, denn die defaults reichen aus.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...