Java 在Postgres表中插入时间戳的问题
我试图通过Java在postgres表中插入一个值。列类型是timestamp 代码如下所示:Java 在Postgres表中插入时间戳的问题,java,postgresql,jdbc,Java,Postgresql,Jdbc,我试图通过Java在postgres表中插入一个值。列类型是timestamp 代码如下所示: SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); String gameStartedTime = format.format(new Date()); String query= "UPDATE gameStatus g SET g.status ='" + gameSta
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
String gameStartedTime = format.format(new Date());
String query= "UPDATE gameStatus g SET g.status ='" + gameStatus
+ g.gameStartTime= to_date('"
+ gameStartedTime + "','yyyy-MM-dd HH:mm:ss')"
// Doesn't matter much
+ " WHERE g.status = 'STARTED' AND " + "g.condition="+ game.getCondition();
现在,当我尝试执行此语句失败时,我得到如下消息:
错误:格式化字符串中“mm”字段的值冲突。
详细信息:该值与相同字段类型的先前设置相矛盾
我不知道出了什么问题
这方面的任何帮助都是有用的。
提前谢谢。
-JE尝试从查询中拆分日期部分,并尝试比较这些值。 看起来(至少从我看到的地方)代表分钟的mm, 不符合
g.gameStartTime=to_date
如果将此部分拉到查询之外,您可以检查值,也许您会发现问题所在。
mm
始终是截止日期()函数的月份。mm
和mm
之间没有区别(与Java的SimpleDataFormat不同)
您需要在分钟内使用mi
手册中提供了所有图案的完整列表:
但首先不应该使用“动态”SQL。最好使用PreparedStatement
,java.sql.Timestamp
和setTimestamp()
。这样可以避免任何格式问题,并防止SQL注入。这样做
java.sql.Date date=new Date();
Timestamp timestamp = new Timestamp(date.getTime());
this.date = timestamp;
然后将this.date
添加到数据库中。使用当前时间,这种方法对我有效:
String query = "INSERT INTO table1 (id,t) VALUES (?, ?)";
//update table1 set t=? where id=?
Connection con = null;
PreparedStatement ps = null;
try{
con = dataSource.getConnection();
ps = con.prepareStatement(query);
ps.setLong(1, 1234); // update ps.setLong(2, 1234);
Calendar cal = Calendar.getInstance();
Timestamp timestamp = new Timestamp(cal.getTimeInMillis());
ps.setTimestamp(2,timestamp); // ps.setTimestamp(1,timestamp);
int out = ps.executeUpdate();
if(out !=0){
System.out.println("Record saved");
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try {
ps.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
或者,您可以使用以下行建立特定的时间戳:
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2015);
cal.set(Calendar.MONTH, 0); // 0 january
cal.set(Calendar.DAY_OF_MONTH, 26);
cal.set(Calendar.HOUR_OF_DAY, 10);
cal.set(Calendar.MINUTE, 47);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Timestamp timestamp = new Timestamp(cal.getTimeInMillis());
试试看:
ps.setTimestamp(位置,新时间戳(System.currentTimeMillis()) 使用java.sql.Date并将日期转换为时间戳,如时间戳Timestamp=new Timestamp(sign_Date.getTime());this.sign_date=时间戳<代码>毫米
不代表分秒呐喊,谢谢一匹没有名字的马。所以我自己也学会了梦游。