-2

我正在为不同的客户建立一个数据库,他们有他们的用户名和密码,但我想看看他们登录的时间。我使用以下代码:

if (userName.equals("EXAMPLE")) {


                        Calendar cal = Calendar.getInstance();
                        cal.getTime();
                        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
                        String Time = "update `clients` set `time`=
                          "+ sdf.format(cal.getTime()) + " where clientid=1 ";

但它有问题,它不会更新表。我将衷心感谢您的帮助。另外,作为一个额外的问题,如果您能帮助我更新时间和日期,那就太好了。谢谢谢谢你的时间。

4

3 回答 3

1

我想出了答案。

public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
    return sdf.format(cal.getTime());
           }

然后在需要时调用 now() :

if (userName.equals("EXAMPLE")) {


                        //update time when client logged in
                        String Time = "update `clients` set `time`='" + now() + "' where clientid=1 "; 
                        stmt.executeUpdate(Time);

            }
于 2012-12-17T00:24:38.973 回答
0

使用带有参数的准备好的语句。这样您就不必格式化日期。可以保存整个日期和时间。

看看这个链接http://docs.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

也很难说为什么它没有更新,因为你没有发布任何数据库更新发生的代码。

于 2012-12-16T02:53:39.607 回答
0

您只是在值周围缺少单引号

String Time = "update `clients` set `time`=
                      '" + sdf.format(cal.getTime()) + "' where clientid=1 ";

但请记住,这个易受攻击的 with 使用SQL Injection参数化查询PreparedStatements

前任

String Time = "update `clients` set `time`= ? where clientid=1 ";
PreparedStatement pstmt = con.prepareStatement(Time);
pstmt.setDate(1, cal.getTime());
pstmt.executeUpdate();
于 2012-12-16T02:53:46.973 回答