0
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`),
4

3 回答 3

1

首先将您的日期参数从字符串转换为日期。对于下面的代码。

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

类 SimpleDateFormat API

现在在准备好的语句中将它们设置为日期,如下所示。由于您的表格结构允许表格中的日期。

query.setDate(2, date);

现在您仍然想为该列设置 null 然后您可以使用并告诉您的查询通过在准备好的语句中使用以下格式来设置 null。

query.setNull(2, java.sql.Types.DATE);

或者

query.setDate(2, null);

设置空 API

java.sql.Types 到 SQL 类型的映射

我认为这将解决您的问题。

于 2013-01-24T17:56:12.790 回答
0

您需要更改将参数传递给准备好的语句的方式

它应该如下所示。datum 和 bdatum 应该是 Date 类型。如果您不使用数据库中定义的类型,您可以将无效数据传递给您的 sql,这会导致异常。

query.setDate(1, datum);
query.setDate(2, bdatum);
query.setInt(3, speler[0]);
query.setInt(4, toernooi[0]);
于 2013-01-24T17:52:21.020 回答
0

我怀疑您的bdatum变量包含一个空字符串。如果要插入 SQL null,则需要传入null,而不是空字符串。(当我在我的机器上尝试使用类似的插入时,我在尝试插入空字符串时得到“不正确的日期值”,但没有使用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

顺便说一句,为日期值传递字符串在语义上是错误的,并且可能不如在将字符串Date传递给PreparedStatement.

于 2013-01-24T17:53:56.820 回答