简体   繁体   English

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

[英]How to insert Date into MySQL Database table in Java?

How do I insert date, without time, to MySQL database table? 如何在没有时间的情况下将日期插入MySQL数据库表? I tried these codes but I get the following exception: 我尝试了这些代码,但出现以下异常:

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

NOTE: In MySQL table, data type of this column I chose date datatype 注意:在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);           
}

I've problem only with date part Query for inserting Date : 我只对日期部分查询问题插入日期:

// 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

}

First of all, to persist a java.util.Date into a database in Java, you will have to convert it to java.sql.Date . 首先,要将java.util.Date持久化到Java数据库中,必须将其转换为java.sql.Date The fortunate thing about JDBC SQL Date is that it's a subclass of Java Date . JDBC SQL Date的幸运之处在于它是Java Date的子类。

Therefore, to create a java.sql.Date from java.util.Date , you will have to do this: 因此,要从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);

Make sure that db.insert_date accepts only java.sql.Date . 确保db.insert_date仅接受java.sql.Date

Where you will have to call your PreparedStatement.setDate() function. 您必须在其中调用PreparedStatement.setDate()函数。

See the related question java.util.Date vs java.sql.Date . 请参阅相关问题java.util.Date与java.sql.Date

NEVER use java.sql.Statement for insert data. 切勿使用java.sql.Statement插入数据。 Use ALWAYS java.sql.PrepartedStatement . 使用总是 java.sql.PrepartedStatement This because is a better way to avoid SQL Injection (see this for an explain). 这是因为这是避免SQL注入的更好方法(请参阅说明)。 So, in your case, you can insert the date in this way: 因此,根据您的情况,您可以通过以下方式插入日期:

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM