Query hmdp start [ERR] 1067 - Invalid default value for ‘begin_time‘

在构建黑马点评项目时遇到一个SQL错误1067,该错误与tb_seckill_voucher表中begin_time字段的默认值有关。问题出在0000-00-0000:00:00这个无效的日期格式。通过查阅资料,发现是MySQL的sql_mode配置问题。解决方案是修改my.ini文件中的sql_mode设置,改为ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,这使得创建表操作成功执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做一个黑马点评的项目遇到了这个报错

Query hmdp start [ERR] 1067 - Invalid default value for 'begin_time'

大概就是在时间的这个字段上有bug

于是我去查看对应的sql语句是

DROP TABLE IF EXISTS `tb_seckill_voucher`;
CREATE TABLE `tb_seckill_voucher` (
`voucher_id` bigint(20) UNSIGNED NOT NULL COMMENT '关联的优惠券的id',
`stock` int(8) NOT NULL COMMENT '库存',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`begin_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '生效时间',
`end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '失效时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`voucher_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '秒杀优惠券表,与优惠券是一对一关系' ROW_FORMAT = Compact;

在找到一些博客之后,发现是mysql配置的一些问题,将my.ini中的sqlmode进行修改,改成如下:

sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

于是就没问题啦!

### 解决 Java 中 `com.hmdp.entity.User.getNickName` 出现的空指针异常 当遇到 `java.lang.NullPointerException` 时,通常是因为程序试图操作一个未初始化或已被置为空的对象。对于当前问题中的 `com.hmdp.entity.User.getNickName()` 调用引发的空指针异常,可以采取以下措施来排查和解决问题。 #### 1. 检查对象实例化情况 确保在调用 `getNickName()` 方法之前,`User` 对象已经被正确创建并赋值。如果 `User` 是通过某种方式动态获取的(例如从数据库加载),则需要验证该过程是否成功完成[^1]。 ```java if (user != null && user.getNickName() != null) { System.out.println(user.getNickName()); } else { System.err.println("User object is not initialized or nickname is null."); } ``` 上述代码片段展示了如何安全地访问可能为 `null` 的对象及其成员变量。 #### 2. 验证数据源可靠性 假如 `User` 实体是从外部服务或者本地存储读取而来,则需确认这些资源能够稳定提供所需的数据项。比如,在分布式架构下,API 请求路径配置不当也可能间接造成此类错误[^2]: - 如果前端向后端发送了一个 HTTP GET 请求至 `/api/user/123` 接口,而后者的实际处理逻辑却指向另一个微服务节点上的不同端口号(如例子提到的 `http://localhost:8081`),那么一旦目标服务器未能正常响应就会导致返回的结果集缺失预期字段从而触发 NPE。 因此建议开发者仔细核对接口文档以及内部依赖关系图谱以规避潜在风险点。 #### 3. 使用 Optional 类增强健壮性 自 JDK 8 开始引入了 `Optional<T>` 容器类用来表示可选值的存在与否状态。利用它可以帮助我们更优雅简洁地表达那些可能会不存在的情况而不必显式写出大量的判空语句: ```java import java.util.Optional; public String safeGetNickname(User user){ return Optional.ofNullable(user) .map(User::getNickName) .orElse("Default Nickname"); } ``` 此函数定义接受任意类型的 User 参数作为输入参数, 并且即使传入的是 Null 值也不会抛出运行期异常而是给出默认替代字符串 "Default Nickname". --- ### 总结 综上所述,针对 `com.hmdp.entity.User.getNickName` 所产生的 NullPointerException ,应该着重关注以下几个方面:一是要保障所使用的实体对象已经得到了恰当的新建;二是审查整个应用程序链路里是否存在任何可能导致关键信息丢失的因素;最后还可以考虑采用现代编程技巧像 Optional 来提升整体系统的容错能力 . ```python def example_function(): pass # Placeholder function to demonstrate code block usage. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值