2017-10-13 35 views
1

我有这样的代码来构建一个表时,我如何格式化日期变量错误的格式。它要么说日期不能保持整数或字符串。我如何输入日期以便它除外?以下是我尝试过的所有方法:插入到数据库表中使用的Java

INSERT INTO Course(CustomerName, Title, Type, Instructor, StartDate,EndDate,Price) VALUES ('Hary','Intro to Stupidity', 'Programming','Davis', 2017/11/12, 2017/04/03, 124.00); 

INSERT INTO Course(CustomerName, Title, Type, Instructor, StartDate,EndDate,Price) VALUES ('Hary','Intro to Stupidity', 'Programming','Davis', 2017-11-12, 2017-04-03, 124.00); 

INSERT INTO Course(CustomerName, Title, Type, Instructor, StartDate,EndDate,Price) VALUES ('Hary','Intro to Stupidity', 'Programming','Davis', 2017.11.12, 2017.04.03, 124.00); 

INSERT INTO Course(CustomerName, Title, Type, Instructor, StartDate,EndDate,Price) VALUES ('Hary','Intro to Stupidity', 'Programming','Davis', (2017/11/12), (2017/04/03), 124.00); 

如果有人能帮上忙,那就太好了!

+3

简答题,不要。而应该使用'PreapredStatement'直接处理日期/时间类型的能力,并让底层驱动程序处理它 - 请参阅[使用预处理语句](https://docs.oracle.com/javase/tutorial/jdbc/basics/) prepared.html)了解更多详情 – MadProgrammer

+0

您是否可能忘记使用“”来包围日期? – herokingsley

+0

你使用什么数据库? Oracle,Postgre,Mysql等。如果您使用Oracle,请查看此链接:http://psoug.org/definition/to_date.htm – esprittn

回答

1

数据库不使用“格式”存储日期时间值。

但是,您可以输入表示为具有格式的字符串的日期时间值。传递SQL(YYYY-MM-DD)期望的适当格式的字符串,例如"2017-11-12",使用双引号标记。

或者,更好的是,将日期时间对象传递给日期时间列中的值。

LocalDate localDate = LocalDate.of(2017 , Month.NOVEMBER , 12) ; 

使用PreparedStatement可避免SQL注入安全风险。

myPreparedStatement.setObject(… , localDate) ; 

作为日期时间对象检索。

LocalDate localDate = myResultSet.getObject(… , LocalDate.class) ; 

阅读Oracle教程和搜索堆栈溢出。这些主题已经被多次解决。

提示:在列名中使用全部小写字母,以便跨数据库实现最大的可移植性。

+0

作为'setObject'的替代方法,一些程序员发现'setDate'和'setTimestamp'稍微容易编码。 –

+1

@BryanPendleton setDate和setTimestamp方法使用设计不佳,麻烦且现在已有的类的参数。避免它们。 Sun,Oracle和JCP社区都放弃了这些课程,你也应该放弃。它们现在被java.time类所取代。 –

+0

我并不争辩新的JDK日期/时间类很好。我只是注意到'setObject'和'getObject'是相当通用的JDBC接口,并不像setDate和setTimestamp方法那么“友好”。你是对的,核心Java社区已经转向了一组新的日期/时间类。不过,我不确定这种热情已经转化为JDBC社区。 –