Neu Verbindung: Java - SQL Server der Wawi

idjgxd

Neues Mitglied
29. Mai 2019
6
0
Hallo zusammen,

ich bin ziemlich neu im Bereich JTL Wawi und habe eine Java-Anwendung geschrieben, die auf meine Datenbank zugreifen soll. Leider gelingt es mir nicht, eine Verbindung erfolgreich herzustellen.

Hier ist mein Quellcode:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class MySQLConnection{
private static Connection con = null;


private MySQLConnection(){
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // Datenbanktreiber für JDBC Schnittstellen laden.

// Verbindung zur JDBC-Datenbank herstellen.
con = DriverManager.getConnection("
jdbc:sqlserver://xxx:49960;" +
"databaseName=eazybusiness;integratedSecurity=true;");
);
} catch (ClassNotFoundException e) {
System.out.println("Treiber nicht gefunden");
} catch (SQLException e) {
System.out.println("Verbindung nicht moglich");
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
}
Mein Problem ist, dass ich mir unsicher bin, welchen Servernamen und welchen Port ich angeben muss. Wenn ich im Server Manager nachschaue, steht beim Servername „xxx\JTLWAWI“. Wenn ich versuche, den Server anzupingen, funktioniert es nicht. Gebe ich im cmd den Servernamen ohne \JTLWAWI ein, klappt es fehlerfrei. Heißt das, ich muss in Java als Servername auch ohne \JTLWAWI arbeiten?

Zum Port: Standard ist 1433. Da ich zwischenzeitlich zwei Datenbanken hatte, gehe ich aber davon aus, dass ich mit UDP 1434 arbeiten muss. Wenn ich wiederum in cmd nachsehe, welcher Port für sqlservr.exe zuständig ist, wird mir 49960 angezeigt.
Ich habe es übrigens auch mit telnet getestet; dort klappt es mit dem Servernamen ohne \JTLWAWI (wie oben beschrieben) und Port 49960. Aber nicht in Java.

Wie ich es drehe und wende, klappt die Verbindung aber nie...
Ich habe schon einiges ergoogelt, die Ports freigegeben, aber nichts hilft mir weiter. Vllt übersehe ich etwas? Wäre für jede Anregung dankbar!

Fehlermeldung im Output:
Verbindung nicht moglich
SQLException: Fehler beim Herstellen der TCP/IP-Verbindung mit dem Host 'xxx', Port 49960. Fehler: 'Der Treiber hat eine unerwartete Antwort vor der Anmeldung erhalten. Überprüfen Sie die Verbindungseigenschaften, und stellen Sie sicher, dass eine SQL Server-Instanz auf dem Host ausgeführt wird, die TCP/IP-Verbindungen am Port annimmt. Dieser Treiber kann nur mit SQL Server 2000 oder höher verwendet werden.'. ClientConnectionId:27c5b76d-a3ff-420b-b0c8-2696dd40153e
SQLState: 08S01
VendorError: 0
 

Shopworker.de

Offizieller Servicepartner
SPBanner
4. Januar 2011
2.609
138
Arnsberg, Sauerland
Ich kann nur eine Mutmaßung anstellen: Stell mal einen festen Port für die Wawi-Datenbank ein und überprüfe ob TCP/IP für diese Datenbank aktiv ist.
Kommst du mit der Wawi an die Datenbank? Evtl. als Servername noch die IP nehmen ...
 

reneromann

Sehr aktives Mitglied
31. August 2012
2.133
5
Wichtig: Du musst den Instanznamen (das \JTLWAWI) in der Verbindungszeichenfolge mit angeben!
Es müsste also "jdbc:sqlserver://xxx:49960\JTLWAWI;" sein...
 

darthvader

Aktives Mitglied
29. Juni 2014
36
4
wenn ich mich recht erinnere ist der Connect-String `jdbc:sqlserver://<servername>\<instancename>:<port>`

D.h. port und Instanzname müssen vertrauscht werden.
 

idjgxd

Neues Mitglied
29. Mai 2019
6
0
Stell mal einen festen Port für die Wawi-Datenbank ein und überprüfe ob TCP/IP für diese Datenbank aktiv ist.
Kommst du mit der Wawi an die Datenbank? Evtl. als Servername noch die IP nehmen ...
Momentan werden mir diese Ports für die Datenbank angezeigt. Bei den ersten beiden habe ich die Portnummer geändert und die Null bei TCP Dynamic Ports entfernt. Mache ich das richtig? Soll ich die anderen Felder genauso bearbeiten?
Die Verbindung zwischen Datenbank und Wawi funktioniert auf jeden Fall.
 

Anhänge

Shopworker.de

Offizieller Servicepartner
SPBanner
4. Januar 2011
2.609
138
Arnsberg, Sauerland
Momentan werden mir diese Ports für die Datenbank angezeigt. Bei den ersten beiden habe ich die Portnummer geändert und die Null bei TCP Dynamic Ports entfernt. Mache ich das richtig? Soll ich die anderen Felder genauso bearbeiten?
Die Verbindung zwischen Datenbank und Wawi funktioniert auf jeden Fall.
Hallo,

ich lasse immer die Dynamic Ports bei 0 und die TCP Ports leer
Ganz unten unter IPAll stelle ich unter TCP Port dann den individuellen Port, z.B. 45678 ein, das reicht ...
 

Shopworker.de

Offizieller Servicepartner
SPBanner
4. Januar 2011
2.609
138
Arnsberg, Sauerland
Laut Microsoft Server Management Studio ist der Servername „xxx\JTLWAWI“ (siehe Anhang) und müsste der Instanzname nicht der Name der Datenbank sein? Also: „xxx\JTLWAWI\eazybusiness“?
Ich finde bei Microsoft folgende Information:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]]

würde in deinem Falle heißen:

jdbc:sqlserver://JENNIEGIRANFBB5\JTLWAWI:45678

Vorausgesetzt du setzt den Port auf 45678 und deine Wawi-Instanz heisst JTLWAWI
 
  • Gefällt mir
Reaktionen: idjgxd

idjgxd

Neues Mitglied
29. Mai 2019
6
0
jdbc:sqlserver://JENNIEGIRANFBB5\JTLWAWI:45678
Ich denke, ich habe das verstanden und korrekt umgesetzt. Zumindest wird nicht mehr angezeigt, dass die Verbindung nicht möglich ist. Wenn ich nun allerdings meine Abfrage durchführe, wird angezeigt:

com.microsoft.sqlserver.jdbc.SQLServerException: Es wurde kein Resultset von der Anweisung zurückgegeben.

Im MS SQL Management Studio funktioniert die Abfrage jedoch... Ist vllt doch die Verbindung fehlerhaft? Oder liegt es am Quellcode:

Statement query;
try {
query = con.createStatement();

String sql = "USE eazybusiness;";
query.executeQuery(sql);
// Tabelle anzeigen
sql = "SELECT kArtikel, fVKNetto, fUVP FROM tArtikel;";

ResultSet result = query.executeQuery(sql);

// Ergebnisstabelle durchforsten
while (result.next()) {
String kArt = result.getString("kArtikel");
String fVKNet = result.getString("fVKNetto");
String fUVP = result.getString("fUVP");
String info = kArt + ", " + fVKNet + ", " + fUVP;

System.out.println(info);
}
} catch (SQLException e) {
e.printStackTrace();
}
 

Anhänge

IT-WEFA

Mitglied
3. April 2019
91
4
Hier ist dein Fehler
sql = "SELECT kArtikel, fVKNetto, fUVP FROM tArtikel;";
" ; " in deiner SQL muss raus!

mit welcher IDE arbeitest du ? Solltest sowas immer in ein Try - Catch ausführen!

Probier das mal

Code:
 String SQL = "SELECT * .... ";

        try {
            PreparedStatement pStmt = con.prepareStatement(SQL);
            ResultSet rs = pStmt.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("ColumnName"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

Versuch mit prepareStatement bzw executeStatement zu arbeiten.
 

Über uns

  • In unserem moderierten JTL-Forum könnt Ihr Euch themenbezogen mit der JTL-Community rund um die Produkte von JTL, passende Erweiterungen und den E-Commerce im Allgemeinen austauschen, Tipps und Tricks teilen sowie Verbesserungswünsche und Fehler diskutieren.

    Unsere Forumsnutzer helfen sich untereinander auch gerne weiter, wenn Sie mal nicht weiterkommen oder einen Ratschlag benötigen.

Schnell-Navigation

Benutzer Menü