Natriumarm Geschrieben 19. Februar 2008 Geschrieben 19. Februar 2008 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 Zitieren
Chris86 Geschrieben 19. Februar 2008 Geschrieben 19. Februar 2008 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 Zitieren
Natriumarm Geschrieben 19. Februar 2008 Autor Geschrieben 19. Februar 2008 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 Zitieren
kingofbrain Geschrieben 19. Februar 2008 Geschrieben 19. Februar 2008 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 Zitieren
bigredeyes Geschrieben 19. Februar 2008 Geschrieben 19. Februar 2008 java? dann sollte es auch exceptions scheppern! die sollten wir mindestens kennen. bigredeyes p.s. tippe auf ClassNotFound Zitieren
Natriumarm Geschrieben 20. Februar 2008 Autor Geschrieben 20. Februar 2008 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(); } } } Zitieren
kingofbrain Geschrieben 20. Februar 2008 Geschrieben 20. Februar 2008 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 Zitieren
Natriumarm Geschrieben 20. Februar 2008 Autor Geschrieben 20. Februar 2008 Haben die Bibliothek wie bei den anderen Projekten im Build Path über Add External JARs hinzugefügt und sie wird mir ja auch angezeigt. Zitieren
kingofbrain Geschrieben 20. Februar 2008 Geschrieben 20. Februar 2008 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 Zitieren
dr.dimitri Geschrieben 20. Februar 2008 Geschrieben 20. Februar 2008 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 Zitieren
ksg9-sebastian Geschrieben 21. Februar 2008 Geschrieben 21. Februar 2008 Wie hier schon geschrieben: Classpath != LibraryPath Starten mit dem VM-Argument: -Djava.library.path=pfad/zum/ordner/in/der/die/dll/liegt Zitieren
Empfohlene Beiträge
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.