Чтобы преобразовать строку и вставить ее как smalldatetime
, вам вообще не нужно использовать java.sql.Timestamp
.Просто передайте объект LocalDateTime
в PreparedStatement#setObject
следующим образом:
Statement st = conn.createStatement();
st.execute("CREATE TABLE #tmp (id int PRIMARY KEY, sdt smalldatetime)");
PreparedStatement ps = conn.prepareStatement("INSERT INTO #tmp (id, sdt) VALUES (?, ?)");
ps.setInt(1, 1);
String originalDate = "01/02/2018 02:29:43 PM";
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("MM/dd/yyyy hh:mm:ss a")
.toFormatter(Locale.US);
LocalDateTime ldt = LocalDateTime.parse(originalDate, formatter);
System.out.println(ldt); // 2018-01-02T14:29:43
ps.setObject(2, ldt);
ps.executeUpdate();
И, если вы используете mssql-jdbc версия 7.1.0 или выше, вы можете получить значения напрямуюв LocalDateTime
объект (я создал запрос на получение для этой функции)
ResultSet rs = st.executeQuery("SELECT sdt FROM #tmp WHERE id=1");
rs.next();
LocalDateTime retrieved = rs.getObject(1, LocalDateTime.class);
System.out.println(retrieved); // 2018-01-02T14:30
// note that the minutes value is rounded