在使用java插入数据库表时,如何格式化日期变量

在使用java插入数据库表时,如何格式化日期变量,java,datetime,jdbc,derby,Java,Datetime,Jdbc,Derby,我有以下代码来构建一个表: CREATE TABLE Course ( CustomerName varchar(30) NOT NULL, Title varchar (30) NOT NULL, Type varchar(30) NOT NULL, Instructor varchar(30) NOT NULL, StartDate Date NOT NULL, EndDate Date NOT NULL, Price float NOT NULL ); 当我试图在

我有以下代码来构建一个表:

CREATE TABLE Course
(
    CustomerName varchar(30) NOT NULL, Title varchar (30) NOT NULL,
    Type varchar(30) NOT NULL, Instructor varchar(30) NOT NULL, StartDate Date NOT NULL, EndDate Date NOT NULL,
    Price float NOT NULL
);
当我试图在课程表中插入内容时,日期显示格式错误。它表示日期不能包含整数或字符串。我如何输入日期,以便将其删除?以下是我尝试过的所有方法:

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

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

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

但您可以输入日期时间值,这些值表示为具有格式的字符串。使用双引号以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教程和搜索堆栈溢出。这些话题已经被讨论过很多次了


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

简短的回答,不要。相反,请使用
preaprestatement
s直接处理日期/时间类型的功能,并让底层驱动程序处理它-有关更多详细信息,请参阅您是否忘记使用“”来包围日期?您使用的是什么数据库?甲骨文,Postgre,Mysql。。。等等,如果您使用Oracle,请查看以下链接:对于postgre:对于MySQL:I使用的是Java,它使用的是Derby。这是我对数据库的了解。我也尝试过在日期前后使用“”,但它仍然会给我和错误作为
setObject
的替代方法,一些程序员发现
setDate
setTimestamp
更容易编码。@BryanPendleton setDate和setTimestamp方法使用设计不良、麻烦的类来获取参数,现在是遗产。避开它们。Sun、Oracle和JCP社区都放弃了这些类,您也应该放弃。现在它们被java.time类取代了,我不认为更新的JDK日期/时间类很好。我刚刚注意到,
setObject
getObject
是相当通用的JDBC接口,不像setDate和setTimestamp方法那样“友好”。您是对的,核心Java社区已经转向一组新的日期/时间类。然而,我不确定这种热情是否已经转化为JDBC社区的热情。