SWT 小部件日期时间插入到 mariadb
SWT widgets datetime inserting to mariadb
我需要帮助。我想在我的数据库中存储一个日期时间值,但它说 时间戳方法不适用于日期时间参数 ,可能指的是准备语句代码“.setTimestamp”。我使用 SWT Datetime 小部件来获取开始日期,但我似乎无法将其放入准备好的语句中。来自 SWT 小部件的日期时间值在给定的参数上传递。
下面是代码:
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();
}
}
您必须自己将 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));
让 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
我需要帮助。我想在我的数据库中存储一个日期时间值,但它说 时间戳方法不适用于日期时间参数 ,可能指的是准备语句代码“.setTimestamp”。我使用 SWT Datetime 小部件来获取开始日期,但我似乎无法将其放入准备好的语句中。来自 SWT 小部件的日期时间值在给定的参数上传递。
下面是代码:
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();
}
}
您必须自己将 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));
让 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