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服务器允许远程连接,需在数据库中给用户授权:
同时检查服务器防火墙是否开放3306端口,你的Android设备能正常访问目标服务器IP。GRANT ALL ON codc2.* TO 'codc2'@'%' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Culyer
相关产品推荐
相关产品推荐

