Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich bin neu in der Community und habe erste Erfahrungen mit Java.
Ich versuche eine Verbindung von meiner Java-Applikation zu einer Microsoft SQL Server 2008 R2-Datenbank herzustellen.
Meine Entwicklungsumgebung ist Eclipse. Das Betriebssystem auf dem Rechner ist Windows XP.
Habe bisher den "Microsoft SQL Server JDBC Driver 3.0" geladen.
Ich habe nun schon mehrmals gelesen, dass man in der ".CLASSPATH"-Datei etwas editieren muss. Nur kenn ich mich nicht genügend mit der Kommandozeile aus, um dort den für mich richtigen Befehl einzugeben.
Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at de.javatest.Database.DatabaseConnection.main(DatabaseConnection.java:23)
Wofür brauche ich den Application-Server jetzt genau?
Der JDBC-Treiber ist sozusagen die Schnittstelle zwischen meiner Java-Anwendung und der SQL-Server-Datenbank. Diese habe ich geladen. Was macht der Application-Server ?
Dachte ich könnte jetzt schon über DataSource ODER DriverManager die Verbindung herstellen?!
Ok hab jetzt analog zum ersten Java-Code-Beispiel versucht die Verbindung über den DriverManager herzustellen. Dort kommt aber ebenfalls eine Exception, trotzdem ich die .jar-Dateien 2.0 bis 4.0 der JDBC-Treiber zumindest schon mal in die "Build Path" gelegt habe.
03.08.2012 17:09:11 com.microsoft.sqlserver.jdbc.SQLServerConnection <init>
SCHWERWIEGEND: Die Java-Laufzeitumgebung (Java Runtime Environment, JRE), Version 1.6, wird von diesem Treiber nicht unterstützt. Verwenden Sie die Klassenbibliothek 'sqljdbc4.jar', die Unterstützung für JDBC 4.0 bietet.
Exception in thread "main" java.lang.UnsupportedOperationException: Die Java-Laufzeitumgebung (Java Runtime Environment, JRE), Version 1.6, wird von diesem Treiber nicht unterstützt. Verwenden Sie die Klassenbibliothek 'sqljdbc4.jar', die Unterstützung für JDBC 4.0 bietet.
at com.microsoft.sqlserver.jdbc.SQLServerConnection.<init>(SQLServerConnection.java:238)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at de.javatest.Database.DatabaseConnection2.main(DatabaseConnection2.java:22)
Liegen alle diese verschiedene Treiberversionen immer noch im Buildpath? Vielleicht solltest du mal alle bis auf die Version 4.0 wieder entfernen, nicht dass da ansonsten die falsche Version eingebunden wird.
Dies in der Fehlermeldung könnte evtl. darauf hinweisen:
Hmm, keine Ahnung, müsste ja jetzt eigentlich funtionieren, bzw. die gleiche Fehlermeldung wie oben sollte so ja nicht mehr erscheinen. Vielleicht musst du noch irgendwas aktualisieren, oder die alten JARs liegen doch noch irgendwie im Projekt. Kannst die ja mal (bis auf die benötigte sdljdbc4.jar) ganz aus dem Projekt löschen bzw. temporär an einen anderen Ort verschieben.
Was mich wundert: Wenn ich eine der Dateien herausnehme oder wieder hinzufüge werde ich beim Start des Programms nicht von Eclipse gefragt, ob ich neu abspeichern will. So als hätte ich nichts verändert.
Wo kann ich denn erkennen, ob wenigstens versucht wird die Dateien aus der BuildPath einzubinden.
Was mich wundert: Wenn ich eine der Dateien herausnehme oder wieder hinzufüge werde ich beim Start des Programms nicht von Eclipse gefragt, ob ich neu abspeichern will. So als hätte ich nichts verändert.
Wo genau nimmst du die Dateien raus oder fügst sie wieder hinzu? Wenn sie nicht im Build Path eingebunden sind, warum sollte dann Eclipse auch meckern?
Die hinzugefügten JARs siehst du in Eclipse im Package-Explorer bei den Referenced LIbraries, oder im Build Path (Rechtsklick auf Projekt und dann Build Path -> Configure Build Path oder Properties).
'sdljdbc4.jar' oder 'sqljdbc4.jar'? Und was ist mit den anderen Dateien? Wo hast du die rausgenommen oder hinzugefügt? Und funktioniert es, wenn du diese anderen Dateien (SQL-Treiber) mal komplett aus deinem Projektordner raus verschiebst?
So hab jetzt die beiden Dateien jtds-1.2.5.jar und jtds-1.2.6.jar von der empfohlenen Webseite jeweils im Build Path hineingelegt und einzeln getestet. Der Fehler bleibt.
Hab auch die Ordner, in denen die jar-Dateien liegen mal mit in den Projektordner gelegt und noch einmal alles durchprobiert. Keine Änderung.
Die Fehlermeldung ist komplett identisch wie vorher? Hmm, dann fällt mir auch nicht mehr viel ein. Du bist aber schon sicher, dass du auch das richtige Projekt ausführst und nicht zufällig die Änderungen mit den Treibern und den Build Path in einem ganz anderen Projekt vornimmst? Na ja, vielleicht kann dir ja wer anderes weiterhelfen...
Trotzdem vielen Dank für die Hilfe und die Mühen. Hab auch die Zeile "Class.forName..." auskommentiert und wieder reingenommen. Keine Änderung.
Mir fehlt auch leider die Erfahrung, da jetzt selber noch etwas zu finden.
Eine andere Möglichkeit ist vielleicht eine falsche Java/Eclipse-Version.
Mich wundert, dass die ganzen Hilfestellungen bislang keinen Erfolg haben. Wo doch in einigen Foren die gleichen Tipps offensichtlich zum Erfolg führen.
Hab JavaSE-1.6 (JRE 6)
Eclipse IDE for Java Developers 3.7 (Indigo)
...
und zusätzlich noch Android SDK, die in diesem Projekt allerdings überflüssig und nicht entscheidend sein wird.
Vielleicht fehlen mir irgendwelche Zusätze.
Hab auch teilweise was von nem SQL-Explorer usw. gelesen...
oder die Java Enterprise Edition...
java.sql.SQLException: Network error IOException: Connection refused: connect
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:410)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at de.javatest.Database.DatabaseConnection2.main(DatabaseConnection2.java:21)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
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 net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:307)
at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:257)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:311)
... 5 more
Hab das gefunden, wenn ich nach der Fehlermeldung suche:
The “Connection refused” exception is thrown by jTDS when it is unable to connect to the server. There may be a number of reasons why this could happen:
1.) The server name is misspelled or the port number is incorrect.
2.) SQL Server is not configured to use TCP/IP. Either enable TCP/IP from SQL Server’s Network Utility app or have jTDS connect via named pipes (see the URL format for information on how to do this).
3.) There is a firewall blocking port 1433 on the server.
Also der Servername ist denke ich mal korrekt. Die Portnummer 1433 habe ich im Konfigurationsmanager eingestellt. Es gab da auch ein paar Beschreibungen/Anleitungen, die alle das Gleiche erklärt haben.
Schaffe es aber nicht über den Befehl in der Kommandozeile -> telnet localhost 1433 eine Verbindung herzustellen
Wenn ich einen Port eingebe der belegt ist laut meinem Port-Scanner-Programm verbindet sich telnet damit.
Aber wenn diese Fehlermeldung jetzt erscheint müsste doch zumindest der Treiber gefunden und geladen werden !?