对MySQL和java的类型分析
MySQL的时间类型在java这类型相应的时间日期java.sql.date
日期时间java.sql.timestamp
时间戳java.sql.timestamp
时间java.sql.time
年java.sql.date
分析
参考mysql的参考手册
戴特:
一个日期。支持的范围是'1000-01-01'to '9999-12-31。MySQL显示、MySQL和项目的第二部分是以下两个方面。
只有日期信息记录,表示一个范围内的1000-01-01到9999-12-31。
MySQL的执行在yyyy-mm-dd.add这类字段的数据,这样等领域的显示,你可以使用一个字符串型或数字型。
由于日期类型字段只记录日期信息,如果在添加的数据中包含时间信息,则时间信息将自动被截断。
如果你想节省时间的信息,你可以考虑使用datetime类型。
经过测试,发现以下2种方法可以在日期类型字段中填充:
通过字符串:
插入time_table(创建日期)值('2007-04-09)
根据数:
插入time_table(创建日期)值(20070409)
可以通过收购获得java.sql.date型
代码是:
日期dtdate = rsbuffer.getdate(创建日期);
测试代码如下:(其中,idbface是基于JDBC的封装,简单的类接受SQL操作数据库)
复制代码代码如下所示:
公共无效testdate()抛出SQLException
{
idbface dbface = dbfactory.createmysqlface();
DBFace.connect();
空表
从time_table 删除字符串strdelete =;
dbface.update(strdelete);
添加
字符串strinsert =插入time_table(创建日期)值(20070409);
dbface.update(strinsert);
获取
String strSelect = select * from time_table;
结果rsbuffer = dbface.select(strselect);
而(rsbuffer.next())
{
日期dtdate = rsbuffer.getdate(创建日期);
(dtdate.tostring System.out.println());
}
DBFace.close();
}
执行结果:2007-04-09
日期时间
日期和时间的组合。支持的范围是'1000-01-01 00:00:00,是的,它也被称为以下三个方面。
datetime和戴特之间的主要区别是,时间可以记录日期和时间信息,只有日期记录日期信息。表达的范围是1000-01-01 00:00:00到23:59:59 9999-12-31 MySQL,这是根据为HH格式化:MM:SS,允许数据在字符串和数字的方式提交。
例如,它是以数字方式提交的。
插入time_table(创建日期)值(20070409132013)
获得这类数据可以使用:java.sql.timestamp型
代码如下:
复制代码代码如下所示:
公共无效testdatetime()抛出SQLException
{
idbface dbface = dbfactory.createmysqlface();
DBFace.connect();
空表
从time_table 删除字符串strdelete =;
dbface.update(strdelete);
添加
字符串strinsert =插入time_table(createdatetime)值(20070409132013);
dbface.update(strinsert);
获取
字符串strselect =SELECT * FROM time_table ;
结果rsbuffer = dbface.select(strselect);
而(rsbuffer.next())
{
时间戳tsbuffer = rsbuffer.gettimestamp(createdatetime );
(tsbuffer.tostring System.out.println());
}
DBFace.close();
}
执行结果:2007-04-09 13:20:13.0
时间戳
时间戳。范围'1970-01-01 00:00:00'to通过一年时间戳列是有用的2037。用于记录插入或更新操作的日期和时间的。表中的第一个时间戳列将自动设置为最近一次操作的日期和时间,如果您不自己分配值的话。还可以通过给空值赋值来设置任何时间戳列到当前日期和时间。
为DateTime类型非常相似
范围是1970-01-01 - 2037,用精度为1的二 /
如果在SQL中未将该列赋给时间戳类型,则列将作为当前时间构造。
提交空值还允许在当前时间记录列。
如果提交错误时间,则将在0填充该列。
时间戳小于datetime类型,只需要4个字节,并将需要8个字节。
但有一点需要特别注意,时间戳只能表示1970 - 2037的时间范围。
使用时间戳必须确保提交的时间数据不能超出此范围。
代码和日期时间类,我不喜欢它,所以我就放弃了。
时间:
一时间。范围- 838:59:59'to '838:59:59。MySQL显示时间,显示,世界的第二部分。
时间只记录时间信息,不包含日期信息。
范围是从838:59:59到838:59:59,MySQL格式数据与HH:MM:SS,允许输入为一个字符串或数字。
代码:
复制代码代码如下所示:
公共无效测试时间()抛出SQLException
{
idbface dbface = dbfactory.createmysqlface();
DBFace.connect();
空表
从time_table 删除字符串strdelete =;
dbface.update(strdelete);
添加
字符串strinsert =插入time_table(创造时间)值(131211);
dbface.update(strinsert);
获取
字符串strselect =SELECT * FROM time_table ;
结果rsbuffer = dbface.select(strselect);
而(rsbuffer.next())
{
时间tmbuffer = rsbuffer.gettime(创造时间);
(tmbuffer.tostring System.out.println());
}
DBFace.close();
}
执行结果:13:12:11
年
两位数或四位数格式的年份。默认值是四位数格式。在四位格式中,允许值为1901到2155和0,两位数格式,允许值为70到69,表示从1970年到2069年。MySQL在YYYY格式显示年份值,但允许你指定列的值年使用字符串或数字。在MySQL 3.22之前,年份类型是不可用的。
一年可以有2个表示,4位和2位。
默认是4位的。它的范围是1901-2155
2位的表达只记录在过去的2,它的范围是1970-2069
允许插入字符串或数字中。
代码:
复制代码代码如下所示:
公共无效testyear()抛出SQLException
{
idbface dbface = dbfactory.createmysqlface();
DBFace.connect();
空表
从time_table 删除字符串strdelete =;
dbface.update(strdelete);
添加
字符串strinsert =插入time_table(createyear)值(2007);
dbface.update(strinsert);
获取
String strSelect = select * from time_table;
结果rsbuffer = dbface.select(strselect);
而(rsbuffer.next())
{
日期dtbuffer = rsbuffer.getdate(createyear );
(dtbuffer.getyear System.out.println()+ 1900);
}
DBFace.close();
}
执行结果:2007
需要解释一下:
有多少年的date.getyear()方法返回1900。所以为了显示正确的时间,你必须添加1900。
该方法已被丢弃。
此外.
一种方法是:不使用上述任何类型来记录时间。
相反,时间记录中的字符的方法(或vchar)。
插入数据和显示记录时不需要任何转换,这样做比较容易。
但有2个重要缺陷。
(1)有必要开发一个验证时间数据的有效方法。例如,在ajidjieoa字符串不是一个时间的信息,但它仍然可以被插入正常。
(2)如果系统需要花时间范围记录和检索条件。这将是一个大麻烦,太。代码无法使用MySQL的时间来检索时使用字符串记录时间范围检索可能会被从数据库的API,这将不可避免地影响性能是的。例如,如果你想要查询的数据的时间从100到100万的数据1992-3-12 1992-3-13天,你会发现100万个数据和开发新的方法来过滤。
此外,MySQL到4.1的精确度仅为秒。
更细的粒度时间应记录。我们可以考虑日期的建设。
DateTime.trick(记录)。
这只是个主意。没有其他问题没有被证实。