2013-01-24 80 views
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。不能插入一個空的日期值到mysql

錯誤:不正確的日期值

分隔符$$

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

您能否顯示fullhouse表的定義? –

+6

你爲什麼要調用'setString',如果這些都是* date *值? –

+0

「datum」和「bdate」變量的值是什麼? – matts

回答

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

Class SimpleDateFormat API

現在在準備好的聲明它們設置爲日期如下所示。由於你的表格結構允許表格中的日期。

query.setDate(2, date); 

現在你仍然想設置爲null,該列,那麼你可以使用,並告訴您的查詢在準備好的聲明中使用以下格式設置爲null。

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

OR

query.setDate(2, null); 

setNull API

Mapping of java.sql.Types to SQL types

我認爲這將解決您的問題。

+0

設置爲空不工作它不認可日期,我需要格式dd-mm-yyyy我如何將您的代碼應用於該格式 – hamchi

+0

我更新了答案,讓我知道如果這對你有用。對於日期格式,我已經爲您提供了所需的一切鏈接。不過,我在答案中更改了dateformat。 – Smit

+0

感謝您與我在一起!工作正常。對不起bieng如此stuborn和不解析日期第一個傢伙 – hamchi

0

你需要改變你如何傳遞參數給你準備好的聲明

它應該像下面。基準和bdatum應該是Date類型。如果你不使用你的數據庫中定義的類型,你可以將無效的數據傳遞給你的SQL,這會導致異常。

query.setDate(1, datum); 
query.setDate(2, bdatum); 
query.setInt(3, speler[0]); 
query.setInt(4, toernooi[0]); 
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 

順便說一句,在傳遞一個字符串的日期值語義錯誤的,可能不是字符串解析到一個不太可靠將其傳遞給PreparedStatement之前的對象。

+0

我想他也可以用'setNull()'。 – Smit