String datum = datumInvoer.getText();
**String bdate = bdatumInvoer.getText();**
String[] speler = spelers.getSelectedItem().toString().split(" ");
String[] toernooi = toernooien.getSelectedItem().toString().split(" ");
try {
PreparedStatement query = con.prepareStatement("INSERT INTO `fullhouse`.`inschrijving_toernooi` ( `IT_datum`, `IT_betaaldatum`, `speler`, `toernooi`) VALUES (?, ?, ? ,?)");
query.setString(1, datum);
query.setString(2, bdatum);
query.setString(3, speler[0]);
query.setString(4, toernooi[0]);
query.execute();我已经将缺省值设置为NULL,但它仍然不会插入它。我即将将数据类型更改为varchar。
错误:日期值不正确
分隔符$$
CREATE TABLE `inschrijving_toernooi` (
`IT_code` int(11) NOT NULL AUTO_INCREMENT,
`IT_datum` date DEFAULT NULL,
`IT_betaaldatum` date DEFAULT NULL,
`speler` int(11) NOT NULL,
`toernooi` int(11) NOT NULL,
PRIMARY KEY (`IT_code`),
UNIQUE KEY `aaa` (`speler`,`toernooi`),
KEY `FS_code_idx` (`speler`),
KEY `FT_code_idx` (`toernooi`),发布于 2013-01-25 01:56:13
首先,将日期参数从字符串转换为日期。下面的代码。
String bdate = bdatumInvoer.getText();
// get the correct date Format
// follow the link to get correct date format
// throws ParseException
Date date = new SimpleDateFormat("dd-MM-yyyy").parse(bdate);现在,在准备好的语句中,将它们设置为日期,如下所示。因为您的表结构允许在表中使用日期。
query.setDate(2, date);现在,您仍然希望将该列设置为null,然后可以在准备好的语句中使用以下格式,并告诉查询设置null。
query.setNull(2, java.sql.Types.DATE);或
query.setDate(2, null);Mapping of java.sql.Types to SQL types
我想这会解决你的问题。
发布于 2013-01-25 01:52:21
您需要更改将参数传递给预准备语句的方式
它应该类似于下面的内容。并且datum和bdatum的类型应该是Date。如果您没有使用在数据库中定义的类型,则可以将无效数据传递给sql,这将导致异常。
query.setDate(1, datum);
query.setDate(2, bdatum);
query.setInt(3, speler[0]);
query.setInt(4, toernooi[0]);发布于 2013-01-25 01:53:57
我怀疑您的bdatum变量包含空字符串。如果要插入SQL null,则需要传入null,而不是空字符串。(当我在我的机器上使用类似的insert进行尝试时,我在尝试插入空字符串时得到了一个“不正确的日期值”,但没有使用null。)
if ("".equals(bdatum))
bdatum = null;
ps.setString(2, bdatum);当您在JDBC中传入一个字符串作为日期值时,MySQL将尝试解析它,但空字符串("")不是有效值。这与您尝试使用日期文字执行插入操作类似:
INSERT INTO `some_table` (`some_nullable_date_column`) VALUES ('2000-01-01') -- this works
INSERT INTO `some_table` (`some_nullable_date_column`) VALUES (NULL) -- this works
INSERT INTO `some_table` (`some_nullable_date_column`) VALUES ('') -- this fails另外,传入日期值的字符串在语义上是错误的,而且可能不如在将字符串传递给PreparedStatement之前将其解析到Date对象的健壮性。
https://stackoverflow.com/questions/14507278
复制相似问题