JDBC 无法登录 LocalDB 实例,但在 SSMS 中我可以登录 [英] JDBC cannot login to LocalDB instance, but in SSMS I can log in

查看:33
本文介绍了JDBC 无法登录 LocalDB 实例,但在 SSMS 中我可以登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过本地主机上的 JDBC 连接到我的数据库.通过windows认证连接没问题,但是我想通过SQL认证连接.因此,我在我的数据库中创建了一个登录名和一个与此登录名对应的用户.我可以正常登录SSMS:

I am trying to connect to my database by JDBC on localhost. Connecting via windows authentication is no problem, but I want to connect via SQL authentication. Therefore, I created a login and a user corresponding to this login in my database. I can normally log in SSMS:

我的 JDBC 连接字符串:jdbc:sqlserver://localhost:1433;databaseName=TestBazyDanych;user=doszke;password=doszke123

My connection string for 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 的用户名和密码相同.

The username and password are the same, as those used for loging to 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();
        }

    }

}

推荐答案

正如 Mark Rotteveel 指出的那样,我试图使用 JDBC 连接到 LocalDB 实例,这似乎是不可撤销的.(参考:这里)

As Mark Rotteveel pointed out, I was trying to connect to a LocalDB instance with JDBC, which seemed undoable. (ref: here)

但是,我安装了 jTDS 并添加到我的类路径中,将连接字符串更改为

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

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

使用此连接字符串、用户名和密码创建一个连接,并且它起作用了.实例管道号是通过

create a connection by the use of this connection string, username and password and it worked. The instance pipe number was taken from cmd line via

sqllocaldb i MSSQLLocalDB

这篇关于JDBC 无法登录 LocalDB 实例,但在 SSMS 中我可以登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆