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




