前提・実現したいこと
JavaのEclipseのspringbootで勤怠管理システムを作成しているのですが、 pgAdminと繋いで入力した時の日付がDB内になければDBに日付(ymd)と出勤時間(start_time)、退勤時間(end_time)をinsert、入力した日付が既にDB内にあるのなら出勤時間(start_time)、退勤時間(end_time)をupdateするようにしたいです。
いろいろ試したのですがなかなか上手くいかなくて、もしよろしければどのようにすれば良いのか教えていただきたいです。
Java
1 2package com.example.demo; 3 4import java.sql.Connection; 5import java.sql.Date; 6import java.sql.DriverManager; 7import java.sql.PreparedStatement; 8import java.sql.ResultSet; 9import java.sql.SQLException; 10 11import org.springframework.stereotype.Controller; 12//import org.springframework.web.bind.annotation.PathVariable; 13import org.springframework.web.bind.annotation.RequestMapping; 14//import org.springframework.web.bind.annotation.RestController; 15import org.springframework.web.bind.annotation.RequestMethod; 16import org.springframework.web.bind.annotation.RequestParam; 17import org.springframework.web.servlet.ModelAndView; 18//import org.springframework.stereotype.Controller; 19 20 21@Controller 22public class HelloController { 23 24 @RequestMapping(value = "/", method = RequestMethod.GET) 25 26 public ModelAndView index(ModelAndView mav) { 27 28 mav.setViewName("index"); 29 mav.addObject("msg", "勤怠開始時間を入力してください。"); 30 31 32 return mav; 33 } 34 35 @RequestMapping(value = "/", method = RequestMethod.POST) 36 public ModelAndView send(@RequestParam("start") String start, @RequestParam("end") String end, ModelAndView mav) { 37 38 Connection conn; 39 java.util.Date d1 = new java.util.Date(); 40 Date date = new Date(d1.getTime()); 41 ResultSet rs = null; 42 43 44 45 try { 46//この辺りでDB内の日付を取得しようとしているが自信なし 47 conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "パスワード"); 48 PreparedStatement pstmt2 = conn.prepareStatement("select * from kintai_daily_todoke where ymd = ?"); 49 pstmt2.setDate(1, date); 50 rs = pstmt2.executeQuery(); 51 52 rs.next(); 53 54 55 System.out.println(rs.getDate(1)); 56 System.out.println(date); 57 58 59 60 // 現在の日付 = DB内の日付 61 if(date == rs.getDate(1)) { 62 63 PreparedStatement pstmt = conn.prepareStatement("update kintai_daily_todoke set start_time = ?, end_time = ? where ymd = ?"); 64 65 pstmt.setString(1, start); 66 pstmt.setString(2, end); 67 pstmt.setDate(3, date); 68 pstmt.executeUpdate(); 69 70 71 72 73 74 mav.addObject("msg", "更新しました"); 75 76 77 78 } 79 else { 80 81; 82 PreparedStatement pstmt = conn.prepareStatement("insert into kintai_daily_todoke values(?,?,?)"); 83 pstmt.setDate(1, date); 84 pstmt.setString(2, start); 85 pstmt.setString(3, end); 86 pstmt.executeUpdate(); 87 88 89 mav.addObject("msg", "データを保存しました!"); 90 91 } 92 93 94 95 }catch(SQLException e) { 96 97 e.printStackTrace(); 98 mav.addObject("msg", "エラーが発生しました!" + e); 99 100 101 102 } 103 104 105 mav.setViewName("index"); 106 107 return mav; 108 109 } 110 111 112} 113 114
試したこと
select文を使って、DB内の情報を取得すれば良いと思ったのですが、現在の日付を取得し、DBの中にその日付のデータがあるのかを比べるコードが自信がない。
補足情報(FW/ツールのバージョンなど)
・DBイメージ
テーブル名:kintai_daily_todoke
ymd | start_time | end_time |
---|---|---|
・ツール、アプリ
Eclipse spring boot
pgadmin4
回答1件
あなたの回答
tips
プレビュー