NetBeans电商项目JDBC连接池zeroDateTimeBehavior参数错误求助
环境信息
- Apache Netbeans IDE 15
- MySQL WorkBench 8.0 CE
- Eclipse GlassFish 6.2.5(build 6.x-b66-g0159b68 2022-02-12T17:39:59+0000)
- 驱动:mysql-connector-j-8.0.31(需保留)、mysql-connector-java-5.1.47(需移除)
问题核心
浏览器报错提示:
jakarta.servlet.jsp.JspException: Unable to get connection, DataSource invalid: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: The connection property 'zeroDateTimeBehavior' only accepts values of the form: 'exception', 'round' or 'convertToNull'. The value 'CONVERT_TO_NULL' is not in this set.
原因是MySQL Connector/J 8.x(cj版本)要求zeroDateTimeBehavior参数值必须为小写的convertToNull,而当前配置用了大写的CONVERT_TO_NULL。
解决步骤
1. 清理冲突驱动
彻底移除项目中的mysql-connector-java-5.1.47,只保留mysql-connector-j-8.0.31,避免新旧驱动导致的配置识别异常。
2. 修正GlassFish连接池属性
- 打开GlassFish域管理控制台,找到与
jdbc/OkStore关联的JDBC连接池 - 进入「额外属性(Additional Properties)」页面
- 找到
zeroDateTimeBehavior属性,将值从CONVERT_TO_NULL修改为convertToNull - 保存配置后重启连接池,测试ping确认连接正常
3. 修正web.xml资源类型
JSTL的<sql:query>需要标准的javax.sql.DataSource类型,修改web.xml中的配置:
<resource-ref> <description>Connects to database for OkStore application</description> <res-ref-name>jdbc/OkStore</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
4. 验证数据源类配置
确保GlassFish中JDBC资源jdbc/OkStore关联的连接池,使用的数据源类为com.mysql.cj.jdbc.MysqlDataSource,而非旧的com.mysql.jdbc.jdbc2.optional.MysqlDataSource。
额外排查点
如果连接池未显式设置zeroDateTimeBehavior,检查JDBC URL参数,若URL包含zeroDateTimeBehavior=CONVERT_TO_NULL,同样修改为小写的convertToNull。
内容的提问来源于stack exchange,提问作者Makito

