Android Studio连接Azure SQL数据库时触发AssertionError: numMsgsRcvd:1 should be less than numMsgsSent:1问题求助
Android Studio连接Azure SQL数据库时触发AssertionError: numMsgsRcvd:1 should be less than numMsgsSent:1问题求助
大家好,我最近在Android Studio里尝试连接Azure SQL数据库时遇到了一个棘手的AssertionError,折腾了好久都没解决,想请各位帮忙看看。
我使用的是mssql-jdbc-12.10.1.jre11驱动,写了一个简单的连接测试方法,代码如下:
public class Server { public static void Connect1() throws SQLException { ResultSet resultSet = null; try { System.out.println("Connecting to the database"); Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties); System.out.println("Database connection test: " + connection.getCatalog()); System.out.println("Closing database connection"); connection.close(); } catch(SQLException e){ e.printStackTrace(); System.out.println("Connection failed"); } catch (NetworkOnMainThreadException e){ e.printStackTrace(); System.out.println("Connection failed"); } catch (AssertionError e){ e.printStackTrace(); System.out.println("Connection failed"); } } }
运行App时,总会抛出AssertionError,对应的堆栈跟踪信息如下:
2025-07-03 19:36:32.627 19153-19175 System.err com.example.azuretestjdbc W java.lang.AssertionError: numMsgsRcvd:1 should be less than numMsgsSent:1 2025-07-03 19:36:32.627 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSReader.readPacket(IOBuffer.java:6814) 2025-07-03 19:36:32.627 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSReader.nextPacket(IOBuffer.java:6778) 2025-07-03 19:36:32.627 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSReader.ensurePayload(IOBuffer.java:6750) 2025-07-03 19:36:32.629 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSReader.readBytes(IOBuffer.java:7068) 2025-07-03 19:36:32.630 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.readInternal(IOBuffer.java:945) 2025-07-03 19:36:32.632 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSChannel$SSLHandshakeInputStream.read(IOBuffer.java:935) 2025-07-03 19:36:32.632 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.readInternal(IOBuffer.java:1197) 2025-07-03 19:36:32.633 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSChannel$ProxyInputStream.read(IOBuffer.java:1183) 2025-07-03 19:36:32.633 19153-19175 System.err com.example.azuretestjdbc W at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:983) 2025-07-03 19:36:32.633 19153-19175 System.err com.example.azuretestjdbc W at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:947) 2025-07-03 19:36:32.633 19153-19175 System.err com.example.azuretestjdbc W at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.-$$Nest$mprocessDataFromSocket(Unknown Source:0) 2025-07-03 19:36:32.636 19153-19175 System.err com.example.azuretestjdbc W at com.android.org.conscrypt.ConscryptEngineSocket.doHandshake(ConscryptEngineSocket.java:236) 2025-07-03 19:36:32.638 19153-19175 System.err com.example.azuretestjdbc W at com.android.org.conscrypt.ConscryptEngineSocket.startHandshake(ConscryptEngineSocket.java:218) 2025-07-03 19:36:32.639 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1843) 2025-07-03 19:36:32.639 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3552) 2025-07-03 19:36:32.639 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:3172) 2025-07-03 19:36:32.640 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:3014) 2025-07-03 19:36:32.640 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1836) 2025-07-03 19:36:32.640 19153-19175 System.err com.example.azuretestjdbc W at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1246) 2025-07-03 19:36:32.643 19153-19175 System.err com.example.azuretestjdbc W at java.sql.DriverManager.getConnection(DriverManager.java:580) 2025-07-03 19:36:32.645 19153-19175 System.err com.example.azuretestjdbc W at java.sql.DriverManager.getConnection(DriverManager.java:190) 2025-07-03 19:36:32.646 19153-19175 System.err com.example.azuretestjdbc W at com.example.azuretestjdbc.Server.Connect1(Server.java:58) 2025-07-03 19:36:32.646 19153-19175 System.err com.example.azuretestjdbc W at com.example.azuretest...
我已经做了这些排查:
- 确认连接参数(URL、用户名、密码等)完全正确,因为用同样的代码和JDBC库在Apache NetBeans里能正常连接到数据库
- 已经处理了Android的
NetworkOnMainThreadException,确保数据库连接操作不在主线程执行 - 全网搜索过这个错误信息,但没找到能解决我问题的方案
有没有朋友遇到过类似的问题?或者能从堆栈信息里看出是什么原因导致的?比如是不是Android的Conscrypt SSL实现和SQL Server JDBC驱动存在兼容性问题?或者有没有什么Android特有的配置需要调整?麻烦大家给点思路,谢谢了!
内容来源于stack exchange
相关产品推荐
相关产品推荐

