如何在 Java 中将日期插入 MySQL 数据库表?

Posted

技术标签:

【中文标题】如何在 Java 中将日期插入 MySQL 数据库表?【英文标题】:How to insert Date into MySQL Database table in Java? 【发布时间】:2013-05-20 08:46:56 【问题描述】:

如何在 mysql 数据库表中插入没有时间的日期? 我尝试了这些代码,但出现以下异常:

com.mysql.jdbc.exceptions.jdbc4.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 'Mar 05 00:00:00 GMT-08:00 2014,1,1)' at line 1

注意:在 MySQL 表中,该列的数据类型我选择了日期数据类型

String Date = "\\d\\d\\d\\d\\D[0-1][0-9]\\D[0-3][0-9]";
while (DateMatcher.find())     
    String date = DateMatcher.group().trim();

    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    Date myDate = formatter.parse(date);

    db.insert_date(myDate,2,1);           

我只有日期部分有问题 查询插入日期:

// insert DATE
public void insert_date(Date  date_str, int sentence_id ,int document_id )
       // Statements allow to issue SQL queries to the database

    try 
        statement = connect.createStatement();

        System.out.println(  "insert into Date(date_Str,Sen_id,doc_id) " +
                 " values(" + date_str + "," +  sentence_id + "," + document_id +  ")"
                 );


        statement.executeUpdate(

         "insert into test.Date(date,Sen_id,doc_id)" +
         " values(" + date_str + "," +  sentence_id + "," + document_id + ")"
          );
    
    catch(Exception e )System.out.println(e);;
    // Result set get the result of the SQL query


【问题讨论】:

为什么不使用 MySQL 日期数据类型 (dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html) 并将列配置为默认值? 你哪里出错了,我只是想知道为什么“程序员”在提问之前不阅读错误消息。注意你是如何构造 MySQL 查询的。尤其是引号。尤其是你不匹配的那句话。 检查您的查询语法.. 那里有问题.. 发布您的查询代码 亲爱的 Micha Wiedenmann 列类型是日期 也尝试用单引号将您的日期字符串“date_str”括起来。 【参考方案1】:

首先,要将java.util.Date 持久化到Java 数据库中,您必须将其转换为java.sql.Date。 JDBC SQL Date 的幸运之处在于它是 Java Date 的子类。

因此,要从 java.util.Date 创建一个 java.sql.Date,您必须这样做:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = formatter.parse(date);
java.sql.Date sqlDate = new java.sql.Date(myDate.getTime());

db.insert_date(sqlDate);

确保db.insert_date 只接受java.sql.Date

您必须在哪里调用您的 PreparedStatement.setDate() 函数。

查看相关问题java.util.Date vs java.sql.Date。

【讨论】:

插入日期(date_Str,Sen_id,doc_id) 值(Wed Mar 05 00:00:00 GMT-08:00 2014,1,1) 同时插入将转换为上述类型的日期跨度> 这是一个完全不同的问题。只是一个提示,使用PreparedStatement.getDate() 检索java.sql.Date 并将其类型转换为java.util.Date【参考方案2】:

切勿使用java.sql.Statement 插入数据。使用始终 java.sql.PrepartedStatement。这是因为这是避免 SQL 注入的更好方法(请参阅this 以获得解释)。因此,在您的情况下,您可以通过这种方式插入日期:

statement = connect.prepareStatement("INSERT INTO test.Date(date, Sen_id, doc_id) VALUES(?, ?, ?)");
statement.setDate(1, new java.sql.Date(date_str.getTime());
statement.setInt(2, sentence_id);
statement.setInt(3, document_id);

【讨论】:

以上是关于如何在 Java 中将日期插入 MySQL 数据库表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在netbeans java中将图像插入mysql数据库

在 PHP/MySQL 中将日期时间存储为 UTC

JAVA里面如何将字符串日期插入到MYSQL数据库

如何在 Xamarin Forms 中将日期、日期时间和时间保存到 SQLite 数据库?

求助!!如何在java代码中,将日期插入mysql数据库(对应字段类型是datetime),用JDBC连接数据库。

如何在 NodeJS 中将数据批量插入 MySQL?