3

如何在 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

}
4

2 回答 2

11

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

因此,要创建java.sql.Datefrom java.util.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

于 2013-05-20T08:51:20.320 回答
0

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

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

于 2019-01-20T15:51:21.257 回答