2016-10-21 4 views
0

Мне нужна помощь. Я хочу сохранить значение datetime в моей базе данных, но он говорит, что метод timestamp не применим к аргументу datetime, возможно, ссылаясь на подготовленный код состояния «.setTimestamp». Я использую виджет SWT Datetime, чтобы получить дату начала, но я не могу представить его в подготовленный оператор. Значения datetime из виджета SWT передаются по указанному параметру.SWT-виджеты datetime inserting to mariadb

Вот код ниже:

public void addLeave(String leaveType, DateTime start, DateTime end, int halfDay){ 
      try{ 
       Connection con = getConnection(); 

       String sql = "INSERT into leaves(user_id, leaves_type, leaves_halfDay,leaves_startDate, leaves_endDate) VALUES(?,?,?,?,?)"; 
       PreparedStatement addLeave = con.prepareStatement(sql); 

       addLeave.setString(1, Pkey); 
       addLeave.setString(2, leaveType); 
       addLeave.setInt(3, halfDay); 
       addLeave.setTimestamp(4, start); 
       addLeave.setTimestamp(5, end); 
       addLeave.execute(); 

      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
+0

'setTimestamp' хочет' java.sql.Timestamp' значение не 'org.eclipse.swt .widgets.DateTime'. Вам нужно будет преобразовать значение. –

+0

ОК спасибо. У меня возникла идея, учитывая, что класс swt datetime имеет методы getYear, getDay() и т. Д., И, возможно, вы предлагаете мне преобразовать его вручную. – Jlorenz1

ответ

3

Вам придется конвертировать DateTime в Timestamp себя:

private Timestamp getTimestamp(DateTime dt) 
{ 
    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.YEAR,   dt.getYear()); 
    cal.set(Calendar.MONTH,  dt.getMonth()); 
    cal.set(Calendar.DAY_OF_MONTH, dt.getDay()); 
    cal.set(Calendar.HOUR_OF_DAY, dt.getHours()); 
    cal.set(Calendar.MINUTE,  dt.getMinutes()); 
    cal.set(Calendar.SECOND,  dt.getSeconds()); 

    return new Timestamp(cal.getTimeInMillis()); 
} 

Затем вызовите его следующим образом:

addLeave.setTimestamp(4, getTimestamp(start)); 
+0

Несомненно, существует более короткий путь! –

+0

@ RickJames Почему? Вам нужно получить время в миллисекундах из DateTime, и я не знаю более короткого пути. Просто оберните его методом. – Baz

+0

Если вам нужно текущее время, то _SQL_ 'NOW (3)' дает вам это. (ОК, возможно, вам не нужно время _current_.) –

0

Пусть MySQL сделайте преобразование как вы INSERT:

CREATE TABLE `ts_dt_n` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `t2` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), 
    `t3` datetime(1) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 

INSERT into ts_dt_n (t2, t3) values (FROM_UNIXTIME(1477155329.123), 
            FROM_UNIXTIME(1477155329.123)); 

SELECT t2, t3 FROM ts_dt_n WHERE id = 5\G 
*************************** 1. row *************************** 
t2: 2016-10-22 09:55:29.123000 
t3: 2016-10-22 09:55:29.1 

Если вы едете из миллисекунды таймера в Java, делят на 1000, как конвертировать и вставка:

INSERT INTO ts_dt_n (t2, t3) values (FROM_UNIXTIME(1477155829739/1000), 
            FROM_UNIXTIME(1477155829739/1000)); 

SELECT t2, t3 FROM ts_dt_n WHERE id = 6\G 
*************************** 1. row *************************** 
t2: 2016-10-22 10:03:49.739000 
t3: 2016-10-22 10:03:49.7 
+2

OP все равно придется конвертировать из 'DateTime' в миллисекунды ... – Baz