前提・実現したいこと
ログイン処理実現のため、入力された文字列をpostgresqlのdbで照合したい。
そのためにtestjavaでsqlに接続・文字取得できているか調べているのですがうまくできておりません。
発生してるエラーはなく、
DAOjavaの取得したい列名(rs.getStringの中身)を適当なものに書き換えると
org.postgresql.util.PSQLException: この ResultSet に列名 ●●●(書きかけた文字) ありません。
とでるのでsqldb取得まではできてると思います。
そこから文字列比較しようとしてるところで失敗に終わるのでどうしてそうなっているのか、アドバイスしていただけると助かります。
該当のソースコード
java
1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9import model.Account; 10import model.Login; 11 12public class AccountDAO { 13 // データベース接続に使用する情報 14 private final String url = "jdbc:postgresql://127.0.0.1:5432/test"; 15 //private final String url ="jdbc:postgresql://127.0.0.1:5432/"; 16 private final String user = "postgres"; 17 private final String password = "postgres"; 18 19 public Account findByLogin(Login login) { 20 Account account = null; 21 22 // データベースへ接続 23 try (Connection conn = DriverManager.getConnection( 24 url, user, password)) { 25 26 // SELECT文を準備 27 String sql = "SELECT USER_ID, PASS, MAIL, NAME, AGE 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 // 一致したユーザーが存在した場合 36 // そのユーザーを表すAccountインスタンスを生成 37 if (rs.next()) { 38 // 結果表からデータを取得 39 String userId = rs.getString("USER_ID"); 40 String pass = rs.getString("PASS"); 41 String mail = rs.getString("MAIL"); 42 String name = rs.getString("NAME"); 43 int age = rs.getInt("AGE"); 44 account = new Account(userId, pass, mail, name, age); 45 } 46 } catch (SQLException e) { 47 e.printStackTrace(); 48 return null; 49 } 50 // 見つかったユーザーまたはnullを返す 51 return null; 52 } 53} 54
java
1package model; 2 3public class Account { 4 private String userId; 5 private String pass; 6 private String mail; 7 private String name; 8 private int age; 9 10 public Account(String userId, String pass, String mail, 11 String name, int age) { 12 this.userId = userId; 13 this.pass = pass; 14 this.mail = mail; 15 this.name = name; 16 this.age = age; 17 } 18 19 public String getUserId() { 20 return userId; 21 } 22 23 public String getPass() { 24 return pass; 25 } 26 27 public String getMail() { 28 return mail; 29 } 30 31 public String getName() { 32 return name; 33 } 34 35 public int getAge() { 36 return age; 37 } 38} 39
java
1package model; 2 3public class Login { 4 private String userId; 5 private String pass; 6 7 public Login(String userId, String pass) { 8 this.userId = userId; 9 this.pass = pass; 10 } 11 12 public String getUserId() { 13 return userId; 14 } 15 16 public String getPass() { 17 return pass; 18 } 19}
java
1package test; 2 3import dao.AccountDAO; 4import model.Account; 5import model.Login; 6 7public class AccountDAOTest { 8 public static void main(String[] args) { 9 testFindByLogin1(); // ユーザーが見つかる場合のテスト 10 testFindByLogin2(); // ユーザーが見つからない場合のテスト 11 } 12 13 public static void testFindByLogin1() { 14 Login login = new Login("toumasu", "1212"); 15 AccountDAO dao = new AccountDAO(); 16 Account result = dao.findByLogin(login); 17 if (result != null && 18 result.getUserId().contentEquals("toumasu") && 19 result.getPass().contentEquals("1212") && 20 result.getMail().contentEquals("toumasuo@gmail.com") && 21 result.getName().contentEquals("トーマス") && 22 result.getAge() == 19) { 23 System.out.println("findByLogin1:成功しました"); 24 } else { 25 System.out.println("findByLogin1:失敗しました"); 26 } 27 } 28 29 public static void testFindByLogin2() { 30 Login login = new Login("toumasu", "12345"); 31 AccountDAO dao = new AccountDAO(); 32 Account result = dao.findByLogin(login); 33 if (result == null) { 34 System.out.println("findByLogin2:成功しました"); 35 } else { 36 System.out.println("findByLogin2:失敗しました"); 37 } 38 } 39}
java
java
補足情報
eclipse
Version: 2018-12 (4.10.0)ールのバージョンなど)
PostgreSQL PgAdmin4 ver 3.5
ここにより詳細な情報を記載してください。

回答4件
あなたの回答
tips
プレビュー