回答編集履歴

3

修正

2024/07/18 04:17

投稿

jimbe
jimbe

スコア13104

test CHANGED
@@ -3,11 +3,11 @@
3
3
  UserDAO.java (クラス名消えちゃってますけど) の 43 行目の SELECT 文には dep.id を付け足すべきでしょう。
4
4
  before:
5
5
  ```
6
- SELECT dep.name ~
6
+ SELECT dep.name FROM
7
7
  ```
8
8
  after:
9
9
  ```
10
- SELECT dep.id, dep.name ~
10
+ SELECT dep.id, dep.name FROM
11
11
  ```
12
12
  そして、 56 ~ 58 行目の取得する部分で name と id が逆です。
13
13
  before:
@@ -24,11 +24,11 @@
24
24
  ```
25
25
 
26
26
  ---
27
- で、 user → dep は n:1 なのですから、 user だけを取り出すのと user の情報を使って dep を取り出す二つのメソッドにするより、 UserBean にオプション的に dep.name を持たせられるよにして loginCheck メソッドを getWithDep とか名前を変えて loginCheck2 みたいに dep テーブルと join して名前を入れちゃうほうが簡単じゃないですかね。
27
+ で、 user → dep は n:1 なのですから、 user だけを取り出すのと user の情報を使って dep を取り出す二つのメソッドにするより、 UserBean にオプション的に dep.name を持たせられるよにして loginCheck メソッドを getWithDep とか名前を変えて loginCheck2 みたいに dep テーブルと join して名前を入れちゃうほうが簡単じゃないですかね。(そうすれば loginCheck2 メソッドも DepBean クラスも不要ですし。ついでに SQLException は throws にして使う側で エラー表示に使用するとか…。)
28
28
 
29
29
  UserDAO.java (loginCheck メソッドの修正案)
30
30
  ```java
31
- public UserBean getWithDep(String uid, String upass) throws SQLException {
31
+ public UserBean getWithDep(String uid, String upass) throws SQLException {
32
32
  String sql = "SELECT u.name, id, pass, dep, d.name AS dep_name" +
33
33
  " FROM user AS u INNER JOIN dep AS d ON u.dep = d.id" +
34
34
  " WHERE id=? AND pass=?";
@@ -53,12 +53,13 @@
53
53
  return null;
54
54
  }
55
55
  ```
56
- UserBean.java (部)
56
+ UserBean.java (追加)
57
57
  ```java
58
58
  public class UserBean implements Serializable {
59
- (中略)
59
+ :
60
60
  private String depName;
61
+
61
- (中略)
62
+ :
62
63
  public String getDepName() {
63
64
  return depName;
64
65
  }
@@ -71,9 +72,17 @@
71
72
  ```java
72
73
  :
73
74
  UserDao userDao = new UserDao();
75
+ try {
74
- UserBean user = userDao.getWithDep(uid, upass);
76
+ UserBean user = userDao.getWithDep(uid, upass);
75
- if(user != null) {
77
+ if(user != null) {
76
- session.setAttribute("uname", user.getName());
78
+ session.setAttribute("uname", user.getName());
77
- session.setAttribute("dname", user.getDepName());
79
+ session.setAttribute("dname", user.getDepName());
80
+ :
81
+ } catch(SQLException e) {
82
+ //例えば
83
+ e.printStackTrace(); //例外の詳細はどこかに残るようにしておいて
84
+ req.setAttribute("errMsg", "※処理に異常が発生しました。"); //利用者には問題が発生したことを知らせる?
85
+ forward = "/web/login.jsp";
86
+ }
78
87
  :
79
88
  ```

2

user→dep は n:1

2024/07/18 03:59

投稿

jimbe
jimbe

スコア13104

test CHANGED
@@ -24,7 +24,7 @@
24
24
  ```
25
25
 
26
26
  ---
27
- で、 user → dep は 1:n なのですから、 user だけを取り出すのと user の情報を使って dep を取り出す二つのメソッドにするより、 UserBean にオプション的に dep.name を持たせられるよにして loginCheck メソッドを getWithDep とか名前を変えて loginCheck2 みたいに dep テーブルと join して名前を入れちゃうほうが簡単じゃないですかね。
27
+ で、 user → dep は n:1 なのですから、 user だけを取り出すのと user の情報を使って dep を取り出す二つのメソッドにするより、 UserBean にオプション的に dep.name を持たせられるよにして loginCheck メソッドを getWithDep とか名前を変えて loginCheck2 みたいに dep テーブルと join して名前を入れちゃうほうが簡単じゃないですかね。
28
28
 
29
29
  UserDAO.java (loginCheck メソッドの修正案)
30
30
  ```java

1

修正・追加

2024/07/17 19:07

投稿

jimbe
jimbe

スコア13104

test CHANGED
@@ -25,6 +25,8 @@
25
25
 
26
26
  ---
27
27
  で、 user → dep は 1:n なのですから、 user だけを取り出すのと user の情報を使って dep を取り出す二つのメソッドにするより、 UserBean にオプション的に dep.name を持たせられるよにして loginCheck メソッドを getWithDep とか名前を変えて loginCheck2 みたいに dep テーブルと join して名前を入れちゃうほうが簡単じゃないですかね。
28
+
29
+ UserDAO.java (loginCheck メソッドの修正案)
28
30
  ```java
29
31
  public UserBean getWithDep(String uid, String upass) throws SQLException {
30
32
  String sql = "SELECT u.name, id, pass, dep, d.name AS dep_name" +
@@ -49,8 +51,10 @@
49
51
  disconnect();
50
52
  }
51
53
  return null;
54
+ }
52
55
  ```
56
+ UserBean.java (一部)
53
- ```
57
+ ```java
54
58
  public class UserBean implements Serializable {
55
59
  (中略)
56
60
  private String depName;
@@ -63,3 +67,13 @@
63
67
  }
64
68
  }
65
69
  ```
70
+ 使う側
71
+ ```java
72
+ :
73
+ UserDao userDao = new UserDao();
74
+ UserBean user = userDao.getWithDep(uid, upass);
75
+ if(user != null) {
76
+ session.setAttribute("uname", user.getName());
77
+ session.setAttribute("dname", user.getDepName());
78
+ :
79
+ ```