Bug #57808 | getDate returns null, but wasNull returns false using convertToNull | ||
---|---|---|---|
Submitted: | 28 Oct 2010 13:36 | Modified: | 15 Apr 2011 15:30 |
Reporter: | Christian Peter | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | Connector / J | Severity: | S3 (Non-critical) |
Version: | 5.1.16 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | convertToNull, getDate, wasNull, zeroDateTimeBehavior |
[28 Oct 2010 13:36]
Christian Peter
[2 Mar 2011 13:54]
Christian Peter
Hi, i just wanted to ask if you need more information about this case. And i found a small bug in my example. Here the correct code for the problem: String stringDate = null; Date theDate = resultset.getDate(columnIndex); if( resultset.wasNull() == true ) { stringDate = "null"; } else { stringDate = theDate.toString(); }
[22 Mar 2011 6:59]
Tonci Grgin
Christian, according to JDBC specs, your expectations are correct. Please attach small but *complete* test case so I can check for problem here.
[28 Mar 2011 9:03]
Christian Peter
sample code to reproduce the behaviour
Attachment: MySQLDateTest.java (application/octet-stream, text), 2.08 KiB.
[28 Mar 2011 9:06]
Christian Peter
Tonci i added a complete testcase to reproduce. The commands to create the necessary table with a single row are: DROP TABLE FOO; CREATE TABLE FOO ( ID INT(3) NOT NULL, ADate DATE NOT NULL, PRIMARY KEY (ID) ); INSERT INTO FOO(ID, ADate) VALUES(1, 0000-00-00); The javacode for the testcase is in the attachment.
[13 Apr 2011 14:33]
Tonci Grgin
Christian, DATE field is marked NOT NULL so this is probably a culprit here. Testing.
[13 Apr 2011 14:45]
Tonci Grgin
So, changing test case as follows produces expected result: createTable("bug57808", "(ID INT(3) NOT NULL PRIMARY KEY, ADate DATE DEFAULT NULL)"); Properties props = new Properties(); props.put("zeroDateTimeBehavior", "convertToNull"); Connection conn1 = null; conn1 = getConnectionWithProps(props); Statement stmt1 = conn1.createStatement(); stmt1.executeUpdate("INSERT INTO bug57808(ID, ADate) VALUES(1, NULL)"); ... Connected to 5.1.31-log java.vm.version : 1.5.0_17-b04 java.vm.vendor : Sun Microsystems Inc. java.runtime.version : 1.5.0_17-b04 os.name : Windows Server 2008 os.version : null sun.management.compiler : HotSpot Client Compiler value of date is null OK, value is null and wasNull returns true I have to think about this since wasNull is expected to check for *database* value of NULL, not something driver converted to NULL.
[13 Apr 2011 14:51]
Tonci Grgin
If .getDate() returns null, then .wasNull() should be true too. Verified as described.
[15 Apr 2011 15:30]
Tonci Grgin
Pushed up to revision 1057.