MySQL是否允许我将格式正确的字符串插入MySQL数据库的数据时间字段?
我正在解析一个文件,结合格式为yyyyMMdd的日期和格式为HHmmss的时间,并计划将它们格式化为如下字符串:
"yyyy-MM-dd HH:mm:ss"
我想将此字符串插入到我的日期时间字段中(其格式与上面的示例相同“带有插入查询。
如果这不是解决问题的正确方法,我应该使用什么方法?在查看MySQL文档后,我得到的印象是,只要格式正确,我就可以这样做。使用Java的Calendar和Date类似乎只会给我带来麻烦。
答案 0 :(得分:2)
这不是正确的方法。正确的方法是使用java.sql.Timestamp,并使用预准备语句来插入日期:
Date date = dateFormat.parse(s);
Timestamp timestamp = new Timestamp(date.getTime());
String sql = "insert into my_table (id, instant) values(?, ?)";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setLong(1, id);
stmt.setTimestamp(2, timestamp);
stmt.executeUpdate();
这将使您的代码可移植,而不是绑定到任何区域设置或数据库。
答案 1 :(得分:1)
正如the manual中所讨论的,这种日期时间文字有许多有效的格式,包括你提出的格式。
所以是的,这将完全按照你的描述工作。但请注意,您无需添加其他格式,因为您可以直接插入YYYYMMDDHHMMSS
- 它甚至不需要作为字符串引用。
答案 2 :(得分:0)
是的,这会奏效。 MySQL使用格式yyyy-MM-dd HH:mm:ss
作为其默认值,但如上所述,您可以使用许多其他格式。
如果您想检查有效日期,请尝试在该日期执行幂等操作。
SELECT 'mydate' + INTERVAL 0 DAY
如果MySQL向您返回相同的内容,则日期有效,否则MySQL将返回NULL。
答案 3 :(得分:0)
如果字符串格式正确,您可以使用它。我在我的代码中执行此操作并具有一个TimeUtil类,可将long转换为DB的指定格式。
然后我可以简单地使用像
这样的语句stat.setString(10, TimeUtil.formatTime(message.submitTime));