Android Studio连接MySQL报java.sql.SQLType类缺失错误咨询
问题原因
这个报错和你配置的10.0.2.2本地地址映射没有关系,核心原因是你引入的com.mysql.cj.jdbc.Driver属于MySQL Connector/J 8.x系列驱动,该版本驱动依赖JDK 1.8引入的java.sql.SQLType接口,但Android系统内置的JDBC类库是经过裁剪的残缺版本,并没有实现这个接口,运行时自然会抛出类找不到的错误。
排查解决方法
- 快速修复方案(仅适合本地开发调试使用):替换兼容Android的MySQL驱动版本
移除当前依赖的8.x版本MySQL驱动,换成mysql-connector-java:5.1.49版本,这个版本不依赖java.sql.SQLType,可以在Android环境正常运行。
更换驱动后需要同步修改代码里的驱动类加载语句,将8.x版本带cj段的驱动类名替换为5.x版本的类名,修改后的可运行示例代码如下:
import android.os.AsyncTask; import java.sql.DriverManager; public class MySql extends AsyncTask<Void, Void ,Void> { @Override protected Void doInBackground(Void ... voids) { try{ // 注意5.x版本驱动类路径不存在cj段 Class.forName("com.mysql.jdbc.Driver"); String ssl = "verifyServerCertificate=false&useSSL=true&Unicode=true"; String timeZONE = "serverTimezone=Europe/Moscow"; String url ="jdbc:mysql://10.0.2.2:3306/alphaProject?"+timeZONE+"&"+ssl; DriverManager.getConnection(url,"root","12345678"); }catch (Exception e){ e.printStackTrace(); } return null; } }
- 生产环境方案:禁止Android端直连MySQL
移动端直连数据库本身是不符合开发规范的做法,存在大量风险:- 数据库账号密码硬编码在APK安装包中,极易被反编译泄露,造成数据库被拖库、数据被篡改等安全问题
- 没有成熟的连接池管理机制,移动端网络不稳定的场景下很容易出现连接泄漏、请求阻塞等问题
- 数据库操作逻辑全部暴露在客户端,后续业务迭代、权限管控的维护成本极高
正规实现方式是在服务端封装一层HTTP/HTTPS业务接口,Android端仅负责发起网络请求调用接口,由服务端程序完成数据库的增删改查操作。
内容的提问来源于stack exchange,提问作者ahmed rashed
相关产品推荐
相关产品推荐

