【问题标题】:How to insert Date into MySQL Database table in Java?如何在 Java 中将日期插入 MySQL 数据库表?
【发布时间】: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”括起来。

标签: java mysql jdbc prepared-statement


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2020-08-11
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2013-04-27
    相关资源
    最近更新 更多