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

Android Studio连接MySQL数据库时抛出Unknown packet type错误

解决Android Studio连接MySQL时抛出“I/O Error: Unknown packet type 0x52”异常的问题

核心错误原因

你用错了JDBC驱动:jtds-1.3.1.jar是专门用于连接SQL Server数据库的驱动,而你要连接的是MySQL数据库,驱动与数据库协议不匹配,导致解析服务器返回的数据包时出现“未知包类型”的异常。


具体修复步骤

1. 替换JDBC驱动

移除项目中的jtds驱动,改用MySQL官方的JDBC驱动:
在Module级别的build.gradle文件中添加依赖:

dependencies {
    implementation 'mysql:mysql-connector-java:8.0.33'
}

注:如果是Android Studio Arctic Fox及以上版本,需确保settings.gradle中已添加mavenCentral()仓库。

2. 修改连接逻辑代码

调整ConnectionHelper2类的驱动类名、连接URL格式,同时修正原代码中的语法错误:

public class ConnectionHelper2 {
    String uname, pass, ip, port, database;

    @SuppressLint("NewApi")
    public Connection connectionClass(){
        ip = "sci-project.lboro.ac.uk";
        database = "codc2";
        uname = "codc2";
        pass = "HIDDEN"; // 替换为你的真实密码
        port = "3306";

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        
        Connection con = null;

        try{
            // 替换为MySQL 8.0+的驱动类(5.x版本用com.mysql.jdbc.Driver)
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 修正MySQL的连接URL格式,必须添加时区参数避免时区错误
            String connectionURL = "jdbc:mysql://"+ip+":"+port+"/"+database+"?user="+uname+"&password="+pass+"&serverTimezone=UTC";
            con = DriverManager.getConnection(connectionURL);

            System.out.println("数据库连接成功");

        }catch(Exception ex){
            Log.e("连接错误 ", ex.getMessage());
        }
        return con;
    }
}

3. 额外注意事项

  • 禁止主线程执行连接操作:当前用StrictMode.permitAll()只是临时测试方案,正式开发必须用协程、AsyncTask或线程池处理网络/数据库操作,否则会触发ANR(应用无响应)。
  • 添加网络权限:确保AndroidManifest.xml中已声明网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 配置数据库远程访问:确认MySQL服务器允许远程连接,需在数据库中给用户授权:
    GRANT ALL ON codc2.* TO 'codc2'@'%' IDENTIFIED BY '你的密码';
    FLUSH PRIVILEGES;
    
    同时检查服务器防火墙是否开放3306端口,你的Android设备能正常访问目标服务器IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:22:22