You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 10:33:10