JDBC连接MySQL失败 调用prepareStatement因con为空报空指针异常
错误根因说明
你遇到的空指针异常核心是getConnection()方法执行失败返回了null,代码未做非空校验直接调用con.prepareStatement()触发报错,可能的具体原因如下:
一、数据库连接层面错误
- MySQL服务未正常运行:检查本地3306端口的MySQL服务是否已启动,服务未开启会直接拒绝连接请求
- 连接参数配置错误:
- 确认
root用户的实际密码是否为1234,密码错误会触发连接权限校验失败 - 确认
hospitalm数据库已成功创建,库名拼写错误会导致找不到目标库 - 若你使用的是MySQL 8.0+版本,驱动类全限定名应为
com.mysql.cj.jdbc.Driver,你当前配置的com.mysql.jdbc.Driver是MySQL 5.x版本的驱动,版本不匹配会导致驱动加载失败 - MySQL 8.0+版本需要在JDBC URL补充时区等必要参数,修正后的URL应为:
jdbc:mysql://localhost:3306/hospitalm?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true,缺少参数会直接触发连接异常
- 确认
- 驱动依赖缺失:检查项目是否引入了对应版本的
mysql-connector-java依赖包,未引入依赖会导致Class.forName加载驱动失败,无法建立连接
二、代码逻辑缺陷
- 获取连接后未做非空校验:你拿到
Connection对象后没有判断是否为null就直接调用方法,一旦连接获取失败就会触发空指针,建议补充非空判断逻辑,连接为空时直接返回错误提示即可 - 插入数据时未显式指定表字段:你的插入SQL写法
insert into hospitalm.patient values(?, ?, ?, ?, ?)依赖表字段的创建顺序,建议修改为insert into hospitalm.patient(pid,pname,address,email_id,ptype) values(?, ?, ?, ?, ?),避免表结构调整后参数顺序错位
三、SQL表结构错误
你提供的建表语句存在拼写错误:PRMARY KEY(pid) 应为 PRIMARY KEY(pid),如果建表时未修正该错误,会导致patient表创建失败,插入数据时触发表不存在的异常,进而导致连接操作失败。
快速定位方案
你可以在getConnection()方法的SQLException捕获块中增加日志打印:System.out.println("连接失败原因:"+e.getMessage());,通过具体的异常信息就能快速定位具体故障点。
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

