在使用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日期类型容易出现时间转换异常,如何避免!

java-JDBC从数据库中读取数据并进行日期民族男女的转换

日期错误异常