在使用jdbc 里面出现了日期数据转换错误,java.util.date 类型的数据怎样转换成java.sql.date 类型。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在使用jdbc 里面出现了日期数据转换错误,java.util.date 类型的数据怎样转换成java.sql.date 类型。相关的知识,希望对你有一定的参考价值。
java.util.Date date = new java.util.Date();javax.sql,Date sqlDate = new javax.sql,Date(date.getTime());
明白了吧 参考技术A java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
JDBC 日期到 SQL 日期
【中文标题】JDBC 日期到 SQL 日期【英文标题】:JDBC date to SQL date 【发布时间】:2016-11-02 06:07:10 【问题描述】:我一直在使用 Java 来存储 csv 文件中的一些记录。 这些记录之一是日期。这里的问题是我使用 JDBC 将这些记录存储在数据库中。现在,Java 的 Date 对象在将其放入数据库时显示错误。我已经坚持了一段时间。请让我知道如何解决这个问题。我在 mysql 中使用 Date 类型将其存储到数据库中。这是造成问题的部分。
DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date();
System.out.println(d1.format(d));
String sql = "INSERT INTO TESTING"+
"VALUES("+"DATE_FORMAT("+d+","+"'%Y-%m-%d'"+"))";
stmt.executeUpdate(sql);
如果我直接在 MySqlWorkBench 中执行此操作,它将正确存储日期。但是通过JDBC这是一个问题。
错误如下图:
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Jun 30 14:04:03 IST 2016,'%Y-%m-%d'))' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1402)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317)
at payex.writeDB(payex.java:221)
at payextestdrive.main(payextestdrive.java:11)
【问题讨论】:
“现在,Java 的 Date 对象在将其放入数据库时显示错误” - 什么错误?在这里使用字符串连接不是正确的解决方案...您绝对应该使用 PreparedStatement,但您需要使用java.sql.Date
,而不是java.util.Date
。
你也可以参考这个帖子***.com/questions/2305973/…
"INSERT INTO TESTING"+"VALUES...
无法工作
您应该真正使用 PreparedStatement 和带有参数占位符的查询,而不是将值连接到查询字符串中。
【参考方案1】:
当您想要添加格式化的日期字符串时,您将d.toString()
添加到 SQL 命令。表名和VALUES
之间也少了一个空格:
String sql = "INSERT INTO TESTING VALUES(DATE_FORMAT(" + d1.format(d) +",'%Y-%m-%d'))";
【讨论】:
嘿,我试过了。感谢您的回答。但是又有一个例外。 com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的日期时间值:com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2983) 处 com.mysql.jdbc 处的“2008”。 MysqlIO.sendCommand(MysqlIO.java:1631) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 在 com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 在 com.mysql.jdbc .Statement.executeUpdate(Statement.java:1402) 在 com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317) 在 payex.writeDB(payex.java:220) 在 payextestdrive.main(payextestdrive.java:11) 【参考方案2】:错误信息很清楚
right syntax to use near 'Jun 30 14:04:03 IST 2016,'%Y-%m-%d'))'
您提供的格式是 MMM DD HH:mm:ss Z YYYY,但系统需要 %Y-%m-%d
试试
DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date();
System.out.println(d1.format(d));
String sql = "INSERT INTO TESTING"+
" VALUES("+"DATE_FORMAT('"+d1.format(d)+"',"+"'%Y-%m-%d'"+"))";
stmt.executeUpdate(sql);
或者干脆
DateFormat d1 = new SimpleDateFormat("yyyy-MM-dd");
Date d = new Date();
System.out.println(d1.format(d));
String sql = "INSERT INTO TESTING"+
" VALUES('"+d1.format(d)+"')";
stmt.executeUpdate(sql);
【讨论】:
您好,感谢您的回答。我试过了,但我遇到了一个例外。 com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的日期时间值:com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2983) 处 com.mysql.jdbc 处的“2008”。 MysqlIO.sendCommand(MysqlIO.java:1631) 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 在 com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 在 com.mysql.jdbc .Statement.executeUpdate(Statement.java:1402) 在 com.mysql.jdbc.Statement.executeUpdate(Statement.java:1317) 在 payex.writeDB(payex.java:221) 在 payextestdrive.main(payextestdrive.java:11)以上是关于在使用jdbc 里面出现了日期数据转换错误,java.util.date 类型的数据怎样转换成java.sql.date 类型。的主要内容,如果未能解决你的问题,请参考以下文章
Spark SQL - 从 oracle 导入时将 oracle 日期数据类型错误转换为时间戳(java.sql)
(更新:如何在 sqflite 中存储 List<String> 数据类型) sqflite 错误:DatabaseException(java.lang.String 无法转换为 jav
在java中,String转换Date日期类型容易出现时间转换异常,如何避免!
在java中,String转换Date日期类型容易出现时间转换异常,如何避免!