import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; class TestBug35115 { private static Connection getConnectionToMySQL(String URLopt) throws Exception { String driver = "com.mysql.jdbc.Driver"; Class.forName(driver).newInstance(); String url = "jdbc:mysql://localhost/db1" + URLopt; String login = "realuser"; String password = "realpass"; Properties info = new Properties(); info.setProperty("user", login); info.setProperty("password", password); System.out.println("Connecting to: " + url); Connection conn = DriverManager.getConnection(url, info); return conn; } private static void getYearAndPrintTypes(Connection c) throws SQLException { Statement s = c.createStatement(); s.execute("DROP TABLE IF EXISTS test_year"); s.execute("CREATE TABLE test_year(y2 year(2), y4 year(4))"); s.execute("INSERT INTO test_year VALUES (08, 2008)"); ResultSet rs = s.executeQuery("select * from test_year"); rs.next(); System.out.println("year(2) has" + "\n type: " + rs.getMetaData().getColumnType(1) + "\n class name: " + rs.getMetaData().getColumnClassName(1) + "\n type name: " + rs.getMetaData().getColumnTypeName(1) + "\n java class: " + rs.getObject(1).getClass()); System.out.println("year(4) has" + "\n type: " + rs.getMetaData().getColumnType(2) + "\n class name: " + rs.getMetaData().getColumnClassName(2) + "\n type name: " + rs.getMetaData().getColumnTypeName(2) + "\n java class: " + rs.getObject(2).getClass()); } public static void main(String[] argv) { try { Connection cDateIsYear = getConnectionToMySQL("?yearIsDateType=true"); System.out.println("With yearIsDateType=true: "); getYearAndPrintTypes(cDateIsYear); Connection cDateIsShort = getConnectionToMySQL("?yearIsDateType=false"); System.out.println("With yearIsDateType=false: "); getYearAndPrintTypes(cDateIsShort); } catch (Exception e) { e.printStackTrace(); } } }