質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Java

    13514questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    5701questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • JSP

    908questions

    JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

  • サーブレット

    118questions

    サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

サーブレットとJSPを用いてデータベースからタイムスタンプの値を取得したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,103

Sfidante

score 89

現在、プログラミング初心者でWebアプリケーションを作っているのですが、
時間の取得でつまづいてしまったので、
質問をさせて頂きます。

行いたいことは、
ある2つの値から
データベース上でそれらの値による検索を行い、
特定のタイムスタンプを取得してくるというものです。

更に、その時間に72時間追加して、
その追加した時間と今の時間を比較します。
その時間が0以下になった時に
テーブルの該当する行を削除します。

説明が下手ですみません。
実際に書いているコードがこちらです。
まだまだ、完成には至っていないので、
考え方等を含めご教授願います。

下記がサーブレットです。
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //エンコード設定
        request.setCharacterEncoding("utf8");
        //sessionスコープの準備
        HttpSession ses = request.getSession(true);
        OfferDao dao = new OfferDao();
        try{
            dao.connect();
            //OfferBeans beans = new OfferBeans();
            //test用にgetParameter
      //仮に設定した値の2つです。
            String myPairID = String.valueOf(request.getParameter("mypairid"));
            String yourPairID = "5000000060000000";
            ses.setAttribute("mypairid", myPairID);
            ses.setAttribute("yourpairid", yourPairID);
            String mypairid = (String)ses.getAttribute("mypairid");
            String yourpairid = (String)ses.getAttribute("yourpairid");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
            Date date = sdf.parse(dao.selectTime(mypairid, yourpairid).toString());
            long baseTime = date.getTime() + 259200000;
            Timestamp timeStamp = new Timestamp(System.currentTimeMillis());
            long timeNow = timeStamp.getDateTime();
            long timeMilliSec = (baseTime - timeNow);
            long hour = timeMilliSec / 3600000;
            long min = (timeMilliSec / 60000) % 60;
            long sec = (timeMilliSec / 1000) % 60;
            String remainingTime = hour + "時間" + min + "分" + sec + "秒";
            request.setAttribute("NowTime", remainingTime);
        }catch(Exception e){
            e.printStackTrace();
            throw new ServletException();
        }

上記のサーブレット内でのDaoのselectTime()の記載のあるDaoがこちらです。
/**更新時間の為のタイムスタンプのセレクト*/
        public OfferBeans selectTime(String myPairID , String yourPairID)throws Exception{
//取得した2つの値に該当する行のdatetime型のtimeを照会します。
            String sql = "SELECT time FROM offer "
                    + "WHERE (offer_sendID = ? AND offer_recID = ?)OR (offer_sendID = ? AND offer_recID = ?)";
            PreparedStatement ps = connect.prepareStatement(sql);
            ps.setString(1, myPairID);
            ps.setString(2, yourPairID);
            ps.setString(3, yourPairID);
            ps.setString(4, myPairID);
            ResultSet rs = ps.executeQuery();
            OfferBeans beans = new OfferBeans();
            rs.next();
            return beans;
        }

上記の状態で実行したときのエラーがこちらです。
java.text.ParseException: Unparseable date: "beans.OfferBeans@49ae1e38"
単純にbeansで取得したデータをSimpleDateFormataの型に入れられていないのでしょうか?

色々調べたりしているのですが、
いまいち本質が掴めません。
何卒、ご教授の程よろしく御願い致します。


↓ここからが変更後のサーブレットです。
dao.connect();
            //test用にgetParameter
            String myPairID = String.valueOf(request.getParameter("mypairid"));
            String yourPairID = "3000000040000000";
            ses.setAttribute("mypairid", myPairID);
            ses.setAttribute("yourpairid", yourPairID);
            String mypairid = (String)ses.getAttribute("mypairid");
            String yourpairid = (String)ses.getAttribute("yourpairid");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
            Date date = sdf.parse(dao.selectTime(mypairid, yourpairid).getTime().toString());
            long baseTime = date.getTime() + 259200000;
            Timestamp timeStamp = new Timestamp(System.currentTimeMillis());
            long timeNow = timeStamp.getDateTime();
            long timeMilliSec = (baseTime - timeNow);
            long hour = timeMilliSec / 3600000;
            long min = (timeMilliSec / 60000) % 60;
            long sec = (timeMilliSec / 1000) % 60;
            String remainingTime = hour + "時間" + min + "分" + sec + "秒";
            request.setAttribute("NowTime", remainingTime);

何卒よろしく御願い致します。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

selectTimeの最後の箇所は、selectしたtimeを格納する処理を書く必要があります。

もしDBのtimeがTimestamp型ならば、下記のようにすればパース処理は不要です。
if (rs.next()) {
    beans.setTime(rs.getTimestamp(1));
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/05/18 14:52

    ご返信ありがとうございます。
    確かにbean.setTime();を行っておらず、
    何も返していませんでした。
    しかし、エラーに関しましては、
    変わりません。
    mysqlのdetatime型からサーブレットのtimestamp型への変換がおかしいのでしょうか?

    キャンセル

  • 2015/05/18 14:58

    selectTimeをtoStringで返還すると、beans.OfferBeans@49ae1e38のような文字列が得られます。ご質問のコードでは、この文字列をパースしようとしているためにエラーになっています。
    sdf.parse(dao.selectTime(mypairid, yourpairid).getTime());のようにすればできると思います。

    キャンセル

  • 2015/05/18 14:59

    ↑文の先頭を訂正
    selectTimeの結果(のOfferBeans)をtoStringで文字列に変換すると...

    キャンセル

  • 2015/05/18 17:53

    ご回答ありがとうございます。
    一応、データベースから時刻は取得できたのですが、
    なぜか、今年の1月の日付を取得しました。
    Sun Jan 18 07:21:16 JST 2015

    変更後のコードは上記に追記致しますので、
    何が原因なのか教えて頂いてもよろしいでしょうか?
    Date型だからというわけではありませんですよね?

    キャンセル

  • 2015/05/18 19:31

    手元にMySQL環境が無いので確認していませんが、datetimeをTimestampで取得すれば直接Timestampが得られているはずで、SimpleDateFormatのparseは不要になると思います。

    キャンセル

  • 2015/05/18 22:16

    色々ご教授いただきありがとうございました。
    最後の疑問に関しては、
    とても初歩的なミスでした。
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");の
    "yyyy-MM-DD HH:mm:ss"の部分のDDが小文字(dd)でなければならなかったようです。
    お手数御かけしました。

    キャンセル

  • 2015/05/18 22:47

    なるほど、そこは見逃していました。
    ただ、しつこいようですが、今回のケースはTimestamp⇒文字列⇒Timestampをするのは無駄があると思いますので、今後は直接Timestampで取得することもご検討ください。

    キャンセル

  • 2015/05/18 23:00

    かしこまりました。
    今後はそちらの方法も勉強してみます。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    Javaでカウントダウンタイマーを作りたい!!

    プログラミング初心者で色々とWebサイトを見て 勉強しているのですが、 いまいち掴めないのでこちらで質問させて頂きます。 やりたいことはカウントダウンタイマーです。 基準となる

  • 受付中

    サーブレットのsetAttributeでJSPによって表示させる処理をしているのですが、うまく表示さ...

    こんにちは、プログラミング初心者でWebアプリケーションを作成しています。 サーブレットとJSPの連携の部分でうまくいかず、 原因不明なため、こちらで質問をさせて頂きます。 おこ

  • 解決済

    Android SimpleDateFormat

    現在ストップウォッチを作成しており、SimpleDateFormatを使用して 00:00:00 のように表示をしたいと思い正規表現の所には mm:ss:SS と入れました。 です

  • 解決済

    java 日付の取得と変更について

    javaの日付の取得と変更に関するコードについて質問です 参考書のとおりに、下記のコードを書いて実行してみたのですが 実行してみても、現在の日付から5日後の日付が出力されず、現在

  • 受付中

    JAVA dateの複数のデータの時刻だけを加算するには

    date型で 複数の日時と時刻が含まれるデータがあります、これをjavaで全部足して合計時間を出すにはどうすればいいでしょうか。 例えば 2016-2-25 06:30:10

  • 解決済

    java SQL 構文について

    前提・実現したいこと 簡単なチャットを作成しているのですが表示画面に表示される一件目のデータがDBから得た情報ではなく入力された情報を表示してしまい、 DBでは文字数やnu

  • 解決済

    指定日までのカウントダウン

    指定した日をダイアログボックスに入力し、ボタンを押下すると現在から指定までのカウントダウンを行うアプリを開発したいです。 インターネットの情報を参考に作成しようとしているので

  • 解決済

    JavaのStringデータをデータベース用にDateに変換する

    前提・実現したいこと Eclipseからオラクルデータベースに接続して二つのテーブルを読み込み、その二つのテーブルのプライマリーキーとユーザーインプットの日付とスコアの4つの列で

同じタグがついた質問を見る

  • Java

    13514questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    5701questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • JSP

    908questions

    JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

  • サーブレット

    118questions

    サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。