Details
- 
    
Bug
 - 
    Status: Closed (View Workflow)
 - 
    
Minor
 - 
    Resolution: Fixed
 - 
    1.1.3
 - 
    None
 - 
    None
 - 
    None
 
Description
When calling  setObject(new Date(), Types.TimeStamp) from a Preparedstatement the field is filled with a zero date String.
When you wrap the Date in a Timestamp Object it's working as expected.
Steps to reproduce:
- Execute the follwing testcase:
 
					import org.junit.After;
			 | 
		
					import org.junit.Before;
			 | 
		
					import org.junit.Test;
			 | 
		
| 
					 | 
		
					import java.sql.*;
			 | 
		
					import java.util.Calendar;
			 | 
		
					import java.util.Date;
			 | 
		
					import java.util.TimeZone;
			 | 
		
| 
					 | 
		
					import static org.junit.Assert.assertEquals;
			 | 
		
| 
					 | 
		
					public class MariaDBDateTest {
			 | 
		
| 
					 | 
		
					    private static final String url =
			 | 
		
					            "jdbc:mysql://" +
			 | 
		
					                    // "jdbc:mariadb://" +
			 | 
		
					                    System.getProperty("hostname", "localhost") + ":" +
			 | 
		
					                    System.getProperty("port", "3306") + "/" +
			 | 
		
					                    System.getProperty("dbname", "test");
			 | 
		
					    private static final String user = "root";
			 | 
		
					    private static final String passwd = "";
			 | 
		
| 
					 | 
		
					    private Connection con;
			 | 
		
					    private Date date;
			 | 
		
| 
					 | 
		
					    @Before
			 | 
		
					    public void setUp() throws Exception {
			 | 
		
					        // Load in the DriverManager Class
			 | 
		
					        Class.forName("org.mariadb.jdbc.Driver");
			 | 
		
					//        Class.forName("com.mysql.jdbc.Driver");
			 | 
		
| 
					 | 
		
					        con = DriverManager.getConnection(url, user, passwd);
			 | 
		
| 
					 | 
		
					        date = Calendar.getInstance(TimeZone.getTimeZone()).getTime();
			 | 
		
					//                new Date();
			 | 
		
					//                Calendar.getInstance().getTime();
			 | 
		
| 
					 | 
		
					        createDB();
			 | 
		
					        System.out.println("Setup Complete.");
			 | 
		
					        System.out.println("**********");
			 | 
		
					    }
			 | 
		
| 
					 | 
		
					    @After
			 | 
		
					    public void tearDown() throws Exception {
			 | 
		
					        con.close();
			 | 
		
					        System.out.println("Teardown Complete.");
			 | 
		
					        System.out.println("**********");
			 | 
		
					    }
			 | 
		
| 
					 | 
		
					    private void createDB() throws Exception {
			 | 
		
					        con.setAutoCommit(true);
			 | 
		
| 
					 | 
		
					        PreparedStatement pstmt_drop = con.prepareStatement("DROP TABLE IF EXISTS test_table");
			 | 
		
					        try {
			 | 
		
					            pstmt_drop.executeUpdate();
			 | 
		
					        } catch (Throwable t) {
			 | 
		
					        }
			 | 
		
| 
					 | 
		
					        PreparedStatement pstmt_create = con.prepareStatement("CREATE TABLE test_table " +
			 | 
		
					                "(" +
			 | 
		
					                "id INT PRIMARY KEY, " +
			 | 
		
					                "someDate1 DATETIME(3)," +
			 | 
		
					                "someDate2 DATETIME(3)" +
			 | 
		
					                ")");
			 | 
		
					        pstmt_create.executeUpdate();
			 | 
		
| 
					 | 
		
| 
					 | 
		
					    }
			 | 
		
| 
					 | 
		
					    @Test
			 | 
		
					    public void testDateTime() throws Exception {
			 | 
		
| 
					 | 
		
					        PreparedStatement pstmt_add = con.prepareStatement("INSERT INTO test_table (id, someDate1, someDate2) VALUES (?, ?, ?)");
			 | 
		
| 
					 | 
		
| 
					 | 
		
					        pstmt_add.setInt(1, 1);
			 | 
		
					        pstmt_add.setObject(2, new Timestamp(date.getTime()), Types.TIMESTAMP);
			 | 
		
					        pstmt_add.setObject(3, date, Types.TIMESTAMP);
			 | 
		
					        pstmt_add.executeUpdate();
			 | 
		
| 
					 | 
		
| 
					 | 
		
					        String sql = "SELECT ID, someDate1, someDate2 FROM test_table t0 WHERE ID = ?";
			 | 
		
					        PreparedStatement pstmt = con.prepareStatement(sql);
			 | 
		
					        pstmt.setInt(1, 1);
			 | 
		
| 
					 | 
		
					        ResultSet rs = pstmt.executeQuery();
			 | 
		
					        while (rs.next()) {
			 | 
		
					            assertEquals(1, rs.getInt(1));
			 | 
		
					            assertEquals(date, rs.getObject(2));
			 | 
		
					//            assertEquals(date,  rs.getObject(3));
			 | 
		
					        }
			 | 
		
					    }
			 | 
		
| 
					 | 
		
					}
			 | 
		
- Then execute mariadb client
MariaDB [test]> select * from test_table;+----+-------------------------+-------------------------+| id | someDate1 | someDate2 |+----+-------------------------+-------------------------+| 1 | 2013-07-19 07:00:17.452 | 0000-00-00 00:00:00.000 |+----+-------------------------+-------------------------+1 row in set (0.00 sec)MariaDB [test]>