Java 在Postgres表中插入时间戳的问题

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

我试图通过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 ='" + 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=时间戳<代码>毫米
不代表分秒呐喊,谢谢一匹没有名字的马。所以我自己也学会了梦游。