2016-10-21 14 views
0

私は助けが必要です。私はデータベースにdatetime値を格納したいが、というメソッドのタイムスタンプはdatetime引数には適用されず、おそらくpreparedstatementコード ".setTimestamp"を参照しているという。私は、SWT Datetimeウィジェットを使用して開始日を取得しますが、準備されたステートメントに入れることはできません。 SWTウィジェットからのdatetime値は、指定されたパラメーターに渡されます。SWTウィジェット日時を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

あなたはTimestampに自分自身をDateTimeを変換する必要があります:ここで

は、以下のコードのその

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)'がそれを返します。 (OK、おそらく_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

関連する問題