MySQL查询默认时间抛出异常

问题现象

创建了一个mysql表,表中有一个字段是Date类型的,默认值时0000-00-00 00:00:00,查询的时候使用的是PrepareStatement,查询结果为ResultSet,从结果中取出Date字段使用的是ResultSet.getDate("XXXX"), 结果会抛出异常:java.sql.SQLException:Value
‘0000-00-00‘ can not be represented as java.sql.Date.

问题原因

Mysql中Date的默认值是"0000-00-00 00:00:00",但是java.sql.Date却认为这是一个不合法的值,所以会抛出上述异常。

解决方案

在mysql的连接的URL中增加一个参数zeroDateTimeBehavior,这个参数可以指定遇到这样的默认值时将这个值转换为什么值。 有两种方案,一种是转换为"0001-01-01 00:00:00", 另一种方案则直接转换为Null. 依次对应的具体配置如下:

String url = "jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=round";  // 转换为 "0001-01-01 00:00:00"
String url = "jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull";   // 转换为Null
时间: 2024-10-15 11:29:20

MySQL查询默认时间抛出异常的相关文章

mysql 设置默认时间为now()

TIMESTAMP的变体1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在创建新记录和修改现有记录的时候都对这个数据列刷新 2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它 3,TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在创建新记录的时候把这个字段设置为0,以后修改时刷新它 4,TIMEST

MySql查询不区分大小写解决方案(两种)

当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感. 解决方案一: 于是怀疑Mysql的问题.做个实验:直接使用客户端用sql查询数据库. 发现的确是大小不敏感 . 通过查询资料发现需要设置collate(校对) . collate规则: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_

Mysql查询时间优化

select  count(*) from table where buytime>='2011-5-31 00:00:00' and buytime<='2011-6-6 23:59:59' group by itemname select  count(*) from table where buytime>=unix_stamp('2011-5-31 00:00:00') and buytime<=unix_stamp('2011-6-6 23:59:59') group b

Mysql中设置默认时间为系统当前时间

Mysql中设置默认时间为系统当前时间 数据库设计时会遇到的一种情况:将系统当前时间设成默认值存储 数据库设计编码: CREATE TABLE `test` ( `name` varchar(50) NOT NULL, `createtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 如果使用SQLyog 来设置时间字段的默

MySQL查询,关于日期和时间戳,查询时间的记录

一. 日期与时间戳数据库日期写入大多数用的是时间戳格式,我们在查询的时候可能不是很方便mysql提供了两个函数: from_unixtime(time_stamp) -> 将时间戳转换为日期 mysql> select from_unixtime(create_time) from tag limit 10; +----------------------------+ | from_unixtime(create_time) | +----------------------------+

mysql 查询时间戳(TIMESTAMP)转成常用可读时间格式

from_unixtime()是MySQL里的时间函数 date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接是Unix 时间戳字符串 后面的 '%Y%m%d' 主要是将返回值格式化 例如: mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y%m%d' ) ->20071120 mysql>SELECT FROM_UNIXTIME( 1249488000, '%Y年%m月%d' ) ->2007年11月20 UNIX_TI

【MySQL】关于时间的查询,比如本月,本年,本季度

-- mysql查询本季度 -- 今天 select * from ticket_order_detail where to_days(use_time) = to_days(now()); -- 7天 SELECT *FROM ticket_order_detail where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date( use_time) -- 近30天 SELECT *FROM ticket_order_detail where DATE_SU

mysql查询语句

mysql查询语句常用SELECT命令打印当前的日期和时间select now();打印当前的日期select curdate();打印当前时间select curtime();查看当前版本select version();打印当前用户select user();查看当前数据库实例select database();查看系统中可用的变量show variables;查看系统中全局变量show global variables;一般查询系统可用变量或是全局变量都是通过like的方式来进行查询的,因

关于 mysql 查询缓存

查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提高了性能,节省时间. 查看缓存是否开启: select @@query_cache_type; 禁用查询缓存:set session query_cache_type=off; 这里的设置只是对目前的设置,是暂时的 若 执行 set session query_cache_type=off; 时报错 提示 restart with query_cache_type=1