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

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

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

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

Q&A

0回答

1214閲覧

Javaでログイン機能を実装したい

sakusakulanbo

総合スコア0

Java

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

0グッド

0クリップ

投稿2020/05/10 12:55

編集2020/05/10 13:04

前提・実現したいこと

Javaで初めてWebアプリを作っています。
ログイン機能を実装したいのですが、DBに登録したユーザー情報でログインテストを行っても、ログインに成功しません。

発生している問題・エラーメッセージ

ユーザーが見つかった場合は「成功しました」、ユーザーが見つからなかった場合は「失敗しました」と表示するテストを行っています。
DBにユーザーを登録しログインテストを行いますが、「失敗しました」が表示されます。

該当のソースコード

Java

1AccountDAO.java 2 3package dao; 4 5import java.sql.Connection; 6import java.sql.DriverManager; 7import java.sql.PreparedStatement; 8import java.sql.ResultSet; 9import java.sql.SQLException; 10 11import model.Account; 12import model.Login; 13 14public class AccountDAO { 15 // データベース接続に使用する情報 16 private final String JDBC_URL = "jdbc:oracle:thin:[ユーザー名]/[パスワード]@//localhost:1521/orcl"; 17 private final String DB_USER = "[ユーザー名]"; 18 private final String DB_PASS = "[パスワード]"; 19 20 public Account findByLogin(Login login) { 21 Account account = null; 22 23 // データベースへ接続 24 try (Connection conn = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PASS)) { 25 26 // SELECT文を準備 27 String sql = "SELECT USER_ID, PASS, HEIGHT, WEIGHT_START, WEIGHT_GOAL FROM ACCOUNT WHERE USER_ID = ? AND PASS = ?"; 28 PreparedStatement pStmt = conn.prepareStatement(sql); 29 pStmt.setString(1, login.getUserId()); 30 pStmt.setString(2, login.getPass()); 31 32 // SELECT文を実行し、結果表を取得 33 ResultSet rs = pStmt.executeQuery(); 34 35 // 一致したユーザーが存在した場合、そのユーザーを表すAccountインスタンスを生成 36 if (rs.next()) { 37 // 結果表からデータを取得 38 String userId = rs.getString("USER_ID"); 39 String pass = rs.getString("PASS"); 40 double height = rs.getDouble("HEIGHT"); 41 double weight_start = rs.getDouble("WEIGHT_START"); 42 double weight_goal = rs.getDouble("WEIGHT_GOAL"); 43 account = new Account(userId, pass, height, weight_start, weight_goal); 44 } 45 } catch (SQLException e) { 46 e.printStackTrace(); 47 return null; 48 } 49 // 見つかったユーザーまたはnullを返す 50 return account; 51 } 52} 53 54AccountDAOTest.java 55 56package test; 57 58import dao.AccountDAO; 59import model.Account; 60import model.Login; 61 62public class AccountDAOTest { 63 public static void main(String[] args) { 64 testFindByLogin(); 65 } 66 67 public static void testFindByLogin() { 68 Login login = new Login("minato", "1234"); 69 AccountDAO dao = new AccountDAO(); 70 Account result = dao.findByLogin(login); 71 if (result != null) { 72 System.out.println("testFindByLogin:成功しました"); 73 } else { 74 System.out.println("testFindByLogin:失敗しました"); 75 } 76 } 77} 78 79Account.java 80 81package model; 82 83public class Account { 84 private String userId; 85 private String pass; 86 private double height; 87 private double weight_start; 88 private double weight_goal; 89 90 // コンストラクタを設定 91 public Account(String userId, String pass, double height, double weight_start, double weight_goal) { 92 this.userId = userId; 93 this.pass = pass; 94 this.height = height; 95 this.weight_start = weight_start; 96 this.weight_goal = weight_goal; 97 } 98 99 // ゲッターを設定 100 public String getUserId() { return userId; } 101 public String getPass() { return pass; } 102 public double getHeight() { return height; } 103 public double getWeight_start() { return weight_start; } 104 public double getWeight_goal() { return weight_goal; } 105 106} 107 108Login.java 109 110package model; 111 112public class Login { 113 private String userId; 114 private String pass; 115 // コンストラクタ(インスタンス生成時に呼び出されるメソッド)を設定 116 public Login(String userId, String pass) { 117 this.userId = userId; 118 this.pass = pass; 119 } 120 // ゲッター(クラス外からフィールドの値を見れるメソッド)を設定 121 public String getUserId() { return userId; } 122 public String getPass() { return pass; } 123} 124

試したこと

「スッキリわかるサーブレット&JSP」というテキストを参考に作成しており、コードを見直していますが、どこに問題があるのかわかりません。
DB接続エラーなどは出ていません。

補足情報(FW/ツールのバージョンなど)

Toncat9(Java11)
Oracle12c

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/05/10 12:59

なんかどっかで見たコードのきがするけど dao.findByLogin が null しかかえしてないとかだな
sakusakulanbo

2020/05/10 13:16

ありがとうございます。 「スッキリわかるサーブレット&JSP入門」というテキストを見て作っています。 DBにユーザ情報は登録しているのですが、なぜ null になるのかが分かりません。
退会済みユーザー

退会済みユーザー

2020/05/10 13:29

なんども同じ質問がでてるよ
sakusakulanbo

2020/05/10 13:36

すみません、確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問