JDBC не может войти в экземпляр LocalDB, но в SSMS я могу войти - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь подключиться к моей базе данных с помощью JDBC на локальном хосте.Подключение через проверку подлинности Windows не проблема, но я хочу подключиться через проверку подлинности SQL.Поэтому я создал логин и пользователя, соответствующего этому логину в моей базе данных.Обычно я могу войти в систему SSMS:

log by the user in SSMS

Моя строка подключения для JDBC: jdbc:sqlserver://localhost:1433;databaseName=TestBazyDanych;user=doszke;password=doszke123

Исключение:

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)

Имя пользователя и пароль те же, что и для входа в систему SSMS.

Вот мой код класса:

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();
        }

    }

}

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Как указал Марк Роттвил , я пытался подключиться к экземпляру LocalDB с JDBC, что казалось невозможным.(ref: здесь )

Однако я установил jTDS и добавил в свой путь к классу, изменил строку подключения на

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

создать соединение с помощью этогоСтрока подключения, имя пользователя и пароль, и это работает.Номер экземпляра канала был взят из строки cmd через

sqllocaldb i MSSQLLocalDB
0 голосов
/ 19 января 2019

Необходимо проверить несколько вещей:

  1. Вы создали doszke пользователя под базой данных и SSMS?
  2. Можете ли вы войти в систему с doszke / doszke123 учетными данными в SSMS?
  3. Проверьте, открыт ли порт 1433 или нет на входящем и исходящем брандмауэре.
  4. Попытка telnet на локальном хосте 1433 .Если это не помогло, измените настройку ниже: Перейдите в Инструменты конфигурации -> Диспетчер конфигурации SQL Server. Выберите Конфигурация сети SQL Server -> Выберите протокол в правом окне, включите tcp / ip и перезапустите службы в службах.
...