如何在 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数据库
如何在 Xamarin Forms 中将日期、日期时间和时间保存到 SQLite 数据库?