-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 ";

ただし、これは脆弱であり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 に答える