PILNE Java 8 + MSSQL Server 2017

0

Witam.

Próbuję połączyć się z bazą danych MSSQL 2017 ale nie daje rady ... nerwowo.
Na pn muszę skończyć projekt. Używałem MySQL niestety musiałem się przesiąść na Microsoft. Przymus.
Próbowałem sposobów przedstawionych na Microsoft no i kilku innych ale nie dało rady. Używałem kiedyś jakiejś starszej wersji i z bólem przeszło. Tu niestety topór w plecy.
Sprawdzałem drivery 8.2, 8.4 i nie dało rady.
Wyrzuca błąd, że użytkownik nie istnieje. A istnieje. Sposoby przedstawione na necie u mnie nie działają.
Miał może ktoś kontakt z połączeniem Java 8 + JDBC Driver 8.2 lub 8.4 + Microsoft SQL 2017?
Proszę o jakiś sprawdzony przykład. Będę niesamowicie wdzięczny.

Pozdrawiam.

7

Masz błąd w 3 linii kodu.

0

@Marcin.Miga: :)

0

Patrzyłem. No ale na tym przykładzie

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectURL {
    public static void main(String[] args) throws ClassNotFoundException {
        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setUser("Owd");
        ds.setPassword("owd");
        ds.setServerName("localhost");
        ds.setPortNumber(1433);
        ds.setDatabaseName("owd");

        try (Connection con = ds.getConnection();
                CallableStatement cstmt = con.prepareCall("{call dbo.uspGetEmployeeManagers(?)}");) {
            // Execute a stored procedure that returns some data.
            cstmt.setInt(1, 50);
            ResultSet rs = cstmt.executeQuery();

            // Iterate through the data in the result set and display it.
            while (rs.next()) {
                System.out.println("EMPLOYEE: " + rs.getString("LastName") + ", " + rs.getString("FirstName"));
                System.out.println("MANAGER: " + rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));
                System.out.println();
            }
        }
        // Handle any errors that may have occurred.
        catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Errory :)

gru 04, 2020 10:54:27 PM com.microsoft.sqlserver.jdbc.TDSChannel enableSSL
WARNING: TLSv1 was negotiated. Please update server and client to use TLSv1.2 at minimum.
com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'Owd'. ClientConnectionId:622b194e-9841-4ec5-92a9-0eb85a18d935
	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
	at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:283)
	at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:129)
	at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:37)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:5233)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3988)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:85)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3932)
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7375)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3206)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2713)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2362)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2213)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1276)
	at com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnectionInternal(SQLServerDataSource.java:1222)
	at com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnection(SQLServerDataSource.java:85)
	at ConnectURL.main(ConnectURL.java:22)
1

A czytałeś treść wyjątku?

0

Wiem. Autoryzacja dwuetapowa była wyłączona.
Dałem inny przykład

    public static void main(String[] args) throws ClassNotFoundException {
        String connectionUrl =
                "jdbc:sqlserver://yourserver.database.windows.net:1433;"
                        + "database=owd;"
                        + "user=Owd;"
                        + "password=owd;"
                        + "encrypt=true;"
                        + "trustServerCertificate=false;"
                        + "loginTimeout=30;";

        try (Connection conn = DriverManager.getConnection(connectionUrl);) {
            Statement stmt = conn.createStatement();
            String SQL = "SELECT  * FROM Stat_wyk";
            ResultSet rs = stmt.executeQuery(SQL);

            // Iterate through the data in the result set and display it.
            while (rs.next()) {
                System.out.println("+++"+rs.getString("status"));
            }
        }
        // Handle any errors that may have occurred.
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

Error

	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:234)
	at com.microsoft.sqlserver.jdbc.SQLServerException.ConvertConnectExceptionToSQLServerException(SQLServerException.java:285)
	at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2462)
	at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:668)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2695)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2362)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2213)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1276)
	at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:861)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:270)
	at ConnectURL.main(ConnectURL.java:24)
1

Dzięki Panowie za dobry trop. Problem leżał w konfiguracji SSL 2 i tls 1.2 trzeba było użyć programu crypto. Niezbędne było również zamknięcie portów TCP mssql i otwarcie w sqlexpress. Konfigurator SQL express. Driver i reszta były ok. A programista że mnie jak z koziej du.. trąba. Ale ważne że chcę się uczyć 😁

1 użytkowników online, w tym zalogowanych: 0, gości: 1