You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android Studio连接SQL Server遇java.sql.SQLException:用户登录失败问题

可能导致登录失败的遗漏排查点

结合你已经完成的排查工作,我整理几个容易被忽略的原因,你可以逐一验证:

  • 连接串参数冲突+格式错误
    你当前的连接串同时启用了integratedSecurity=true(Windows身份验证)和SQL账号密码,这会直接冲突——jtds会优先使用Windows身份验证,完全忽略你传入的admin0账号密码。如果admin0是SQL Server身份验证账号,必须把integratedSecurity改为false,或者直接移除这个参数。
    另外,你的数据库名写法也有问题,正确的连接串格式应该是这样:

    Connection DbConn = DriverManager.getConnection(
        "jdbc:jtds:sqlserver://192.168.10.151:1433;databaseName=db_test;integratedSecurity=false;", 
        "admin0", 
        "admin0"
    );
    

    或者用更简洁的路径式写法:

    Connection DbConn = DriverManager.getConnection(
        "jdbc:jtds:sqlserver://192.168.10.151:1433/db_test;integratedSecurity=false;", 
        "admin0", 
        "admin0"
    );
    
  • jtds驱动版本与SQL Server不兼容
    如果你的SQL Server是2019及以上版本,老版jtds可能不支持新版的加密协议(比如TLS 1.2),导致身份验证失败。建议升级到最新稳定版的jtds驱动,或者在连接串中强制启用SSL:

    "jdbc:jtds:sqlserver://192.168.10.151:1433/db_test;integratedSecurity=false;ssl=require;"
    
  • SQL账号的IP访问限制
    去SQL Server Management Studio里检查admin0账号的属性:找到该账号→右键「属性」→切换到「登录」选项卡,看看是否设置了允许访问的客户端IP地址。如果有特定IP白名单,记得把Android设备的局域网IP加进去。

  • Android设备的网络连通性细节
    确认Android设备和SQL Server在同一个局域网,而且设备用的是WiFi(移动数据肯定连不上内网数据库)。可以在设备上试试ping SQL Server的IP,验证网络是否真的通。另外,也有可能SQL Server的IP因为DHCP变动了,虽然你电脑能登,但设备访问的是旧IP?

  • 冗余的驱动加载代码
    从JDBC 4.0开始,驱动会自动通过服务提供者机制加载,不需要显式调用Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();。你可以删掉这句代码,直接调用DriverManager.getConnection(),避免可能的类加载冲突问题。

内容的提问来源于stack exchange,提问作者Eddy Sawaya

火山引擎 最新活动