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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

1270閲覧

java sqlについて

aaa11

総合スコア14

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2021/01/25 16:30

編集2021/01/25 16:35

出勤ボタンが押されてなければエラーページに行くのですが退勤ボタンを押した後にまた退勤ボタンを押すと更新され無いようにしたいですがうまくいかないので教えていただきたいです。

package dto;
import java.sql.Date;
import java.sql.Time;

public class WorkDto {

private int id; private String userid; private Date workday; private Time attendacetimes; private Time absencetimes; public WorkDto (){ } public WorkDto (String userid,Date workday,Time attendacetimes, Time absencetimes){ this.userid = userid; this.workday = workday; this.attendacetimes = attendacetimes; this.absencetimes = absencetimes; } public int getid() { return id; } public void setid(int id) { this.id = id; } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public Date getWorkday() { return workday; } public void setWorkday(Date workday) { this.workday = workday; } public Time getAttendacetimes() { return attendacetimes; } public void setAttendacetimes(Time attendacetimes) { this.attendacetimes = attendacetimes; } public Time getAbsencetimes() { return absencetimes; } public void setgetAbsencetimes(Time absencetimes) { this.absencetimes = absencetimes; }

}

package servlet;

import java.io.IOException;
import java.sql.Time;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dto.UserDto;
import dto.WorkDto;
import logic.WorkLogic;

/**

  • Servlet implementation class AbsenceServlet

*/
@WebServlet("/AbsenceServlet")
public class AbsenceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

/** * @see HttpServlet#HttpServlet() */ public AbsenceServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //レスポンス(出力データ)の文字コードを設定 response.setContentType("text/html;charset=UTF-8"); //文字コードをUTF-8で設定 //リクエスト(受信データ)の文字コードを設定 request.setCharacterEncoding("UTF-8"); //文字コードをUTF-8で設定 //セッションからユーザーデータを取得 HttpSession session = request.getSession(); UserDto userLoginSession = (UserDto)session.getAttribute("userlogin"); String userid = (String)session.getAttribute("userid"); //セッションからパラメータ取得(userid) //java.util.Dateからjava.sql.Dateに変換 java.util.Date d = new java.util.Date();//現在日時を取得 java.sql.Date workday = new java.sql.Date(d.getTime()); //ログイン状態によって表示画面を振り分ける if (userLoginSession != null) { boolean succesFlg = true; //成功フラグ(true:成功/false:失敗) WorkDto workdto = new WorkDto(); workdto.setUserid(userid); workdto.setWorkday(workday); workdto.setgetAbsencetimes(new Time(System.currentTimeMillis()));//現在時刻 //DBに登録 WorkLogic worklogic = new WorkLogic(); try { succesFlg = worklogic.registAbsencetimeCheck(workdto); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } //成功/失敗に応じて表示させる画面を振り分ける if (succesFlg) { //成功 request.getRequestDispatcher("/WEB-INF/jsp/absencetimes_success.jsp").forward(request, response); } else { //失敗した場合、エラー画面(error.jsp)を表示する request.getRequestDispatcher("/WEB-INF/jsp/erro.jsp").forward(request, response);

// request.setAttribute("error", "再入力してください。");
}
}else {
//失敗:ログインNGとしてログイン画面へ転送
request.getRequestDispatcher("/WEB-INF/jsp/user_login.jsp").forward(request, response);
}
}
}

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import dto.WorkDto;

public class WorkDao {
private DBConnection db;
public WorkDao(DBConnection db) {
this.db = db;
}
//JDBCの接続に使用するオブジェクトを宣言
Connection con = null ; // Connection(DB接続情報)格納用変数
PreparedStatement ps = null ; // PreparedStatement(SQL発行用オブジェクト)格納用変数
ResultSet rs = null ; // ResultSet(SQL抽出結果)格納用変数

//--------------------退勤処理--------------------------
public boolean registAbsencetime(WorkDto workdto) throws Exception {
boolean judge = false;
try {
con = db.getConnection();
con.setAutoCommit(false);
//出勤が押されていなかったらfalseを返す
String sql = "SELECT * from worktimetable WHERE userid = ? AND workday = ?";
ps = con.prepareStatement(sql);
ps.setString(1, workdto.getUserid());
ps.setDate(2, workdto.getWorkday());
ResultSet rs = ps.executeQuery();
if(rs.next()) {
//退勤が押されていたらfalseを返す
sql = "SELECT * from worktimetable WHERE userid = ? AND workday = ? AND absencetimes = ?";
ps = con.prepareStatement(sql);
ps.setString(1, workdto.getUserid());
ps.setDate(2, workdto.getWorkday());
ps.setTime(3, workdto.getAbsencetimes());
rs = ps.executeQuery();
if(rs.next()) {
judge = false;
}else {
sql = "UPDATE worktimetable SET absencetimes = ? WHERE userid = ? AND workday = ?";
ps = con.prepareStatement(sql);
ps.setTime(1, workdto.getAbsencetimes());
ps.setString(2, workdto.getUserid());
ps.setDate(3, workdto.getWorkday());
ps.executeUpdate();
judge = true ;
}
} else {
judge = false;
}
}catch (SQLException e) {
e.printStackTrace();
//実行結果を例外発生として更新
judge = false ;
} finally {
//-------------------------------------------
//トランザクションの終了
//-------------------------------------------
if(judge){
//明示的にコミットを実施
try {
con.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}else{
//明示的にロールバックを実施
try {
con.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//-------------------------------------------
//接続の解除
//-------------------------------------------
//PreparedStatementオブジェクトの接続解除
if (ps != null) { //接続が確認できている場合のみ実施
try {
ps.close(); //接続の解除
} catch (SQLException e) {
e.printStackTrace();
}
}
//Connectionオブジェクトの接続解除
if (con != null) { //接続が確認できている場合のみ実施
try {
con.close(); //接続の解除
} catch (SQLException e) {
e.printStackTrace();
}
}
//実行結果を返す
return judge;
}

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2021/01/25 16:59

ここの掲示板ではMarkdownの使い方を覚えてください。 コードは https://teratail.com/help/question-tips#questionTips3-7 の [コード] に修正してください。 SQLで使っているテーブルのCREATE TABLE文も同じくMarkdownのコードで追記してください。
Orlofsky

2021/01/25 17:00

同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで示したり、質問にバージョンも明記した方が適切なコメントが付き易いです。
m.ts10806

2021/01/25 19:24

「うまくいかない」だと何につまずいてるか問題なのか何も伝わらないかと。
guest

回答2

0

間違って色々なところに書いてました。
そして自己解決しました。

投稿2021/01/26 06:54

aaa11

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

package dto;
import java.sql.Date;
import java.sql.Time;

public class WorkDto {

private int id; private String userid; private Date workday; private Time attendacetimes; private Time absencetimes; public WorkDto (){ } public WorkDto (String userid,Date workday,Time attendacetimes, Time absencetimes){ this.userid = userid; this.workday = workday; this.attendacetimes = attendacetimes; this.absencetimes = absencetimes; } public int getid() { return id; } public void setid(int id) { this.id = id; } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public Date getWorkday() { return workday; } public void setWorkday(Date workday) { this.workday = workday; } public Time getAttendacetimes() { return attendacetimes; } public void setAttendacetimes(Time attendacetimes) { this.attendacetimes = attendacetimes; } public Time getAbsencetimes() { return absencetimes; } public void setgetAbsencetimes(Time absencetimes) { this.absencetimes = absencetimes; }

}

投稿2021/01/25 16:32

aaa11

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/01/25 19:24

「回答」でいいのでしょうか。 追記なのであれば質問は編集できるので、そちらへ。
aaa11

2021/01/26 06:59

自己解決しました。
m.ts10806

2021/01/26 08:54

別にそれは良いとして説明もなくコードだけマークダウンも使わずベタッと貼ってもなんの参考にもならないので、編集してちゃんと書いてください。 特にコードにマークダウンのcode使わないのは勘弁。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問