Java – JDBC can’t log in to the LocalDB instance, but I can log in in SSMS

JDBC can’t log in to the LocalDB instance, but I can log in in SSMS… here is a solution to the problem.

JDBC can’t log in to the LocalDB instance, but I can log in in SSMS

I’m trying to connect to my database via JDBC on localhost. There is no problem connecting via Windows authentication, but I want to connect via SQL authentication. So I created a login in my database and a user corresponding to that login. I can log in to SSMS:

log by the user in SSMS

My JDBC connection string:
jdbc:sqlserver://localhost:1433; databaseName=TestBazyDanych; user=doszke; password=doszke123

Throwing an exception:

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'doszke'. ClientConnectionId:b7005fe3-904d-40c5-a89e-af0cb61250d6
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:254)
    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:258)
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:104)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4772)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3581)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:81)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3541)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7240)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2869)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2395)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2042)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1889)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1120)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:700)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:251)
    at main. Main.main(Main.java:38)

The user name

and password are the same as the user name and password used to log in to SSMS.

Here is my class code:

package main;

import java.sql.*;

public class Main {

private static ResultSet selectStan(Connection connection) throws SQLException {
        String sql_stmt = "SELECT * FROM STAN;";
        Statement statement = connection.createStatement();
        ResultSet result = statement.executeQuery(sql_stmt);
        System.out.println("Select executed");
        return result;
    }

public static void main(String[] args) {

try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

String userName = "doszke";
        String password = "doszke123";

String url = "jdbc:sqlserver://localhost:1433; databaseName=TestBazyDanych; user=doszke; password=doszke123";

try (Connection con = DriverManager.getConnection(url)) {

if(con != null){
                System.out.println("connected");
            } else {
                System.out.println("unable to connect");
            }

}
        catch (SQLException e) {
            e.printStackTrace();
        }

}

}

Solution

As Mark Rotteveel pointed out, I tried to connect to a LocalDB instance using JDBC, which didn’t seem to work. (Quote: here).

However, I installed jTDS and added to my classpath, changing my connection string to

jdbc:jtds:sqlserver://./TestBazyDanych; instance=LOCALDB#EB7165FD; namedPipe=true 

The connection is created using this connection string, user name, and password, and succeeds. The instance pipeline number is obtained

from the cmd line

sqllocaldb i MSSQLLocalDB

Related Problems and Solutions