前提・実現したいこと
javaでpostgressqlに接続して、selectでデータを取得
それを元に文字列で比較を行い、同じなら成功と表示させたいのですが、うまくいきません。
エラーなどは発生しておりませんので、取得したデータがうまくuserId,passに格納されてないのかと思うのですがそのあたりアドバイスいただけると助かります。
追記
sqlテーブルはすべてvarchar(20)にしております。
(例)PHP(CakePHP)で●●なシステムを作っています。
該当のソースコード
java
1import java.sql.Connection; 2import java.sql.DriverManager; 3import java.sql.PreparedStatement; 4import java.sql.ResultSet; 5import java.sql.SQLException; 6 7 8public class DAO { 9 // データベース接続に使用する情報 10 11 private final String url = "jdbc:postgresql://127.0.0.1:5432/test"; 12 private final String user = "postgres"; 13 private final String password = "postgres"; 14 15 public Acount findByLogin(Login login) { 16 Acount acount = null; 17 18 // データベースへ接続 19 try (Connection conn = DriverManager.getConnection(url, user, password)) { 20 21 // SELECT文を準備 22 String sql = 23 24 "select * from ユーザーログイン情報 where ログインid = ? AND パスワード = ?"; 25 26 PreparedStatement pStmt = conn.prepareStatement(sql); 27 28 pStmt.setString(1, login.getUserId()); 29 pStmt.setString(2, login.getPass()); 30 31 // selectを実行し結果を取得 32 ResultSet rs = pStmt.executeQuery(); 33 34 // 一致したユーザーが存在した場合 35 // そのユーザーを表すAcountインスタンスを生成 36 if (rs.next()) { 37 // 結果からデータを取得 38 String userId = rs.getString("ログインid"); 39 String pass = rs.getString("パスワード"); 40 //String nisu = rs.getString("ユーザー名"); 41 //ここまでは結果を取得できている 42 43 44 acount = new Acount(userId, pass); 45 //,nisu); 46 } 47 } catch (SQLException e) { 48 e.printStackTrace(); 49 return null; 50 } 51 // 見つかったユーザーまたはnullを返す 52 return null; 53 } 54}
java
1package ログイン; 2 3public class Acount { 4 5 private String userId; 6 private String pass; 7 //private String nisu; 8 9 10 public Acount(String userId, String pass 11 //,String nisu 12 ) { 13 this.userId = userId; 14 this.pass = pass; 15 //this.nisu = nisu; 16 17 } 18 19 public String getUserId() { 20 return userId; 21 } 22 23 public String getPass() { 24 return pass; 25 } 26 27}
java
1package ログイン; 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
1 2package ログイン; 3 4 5public class DAOTest { 6 public static void main(String[] args) { 7 testFindByLogin1(); // ユーザーが見つかる場合のテスト 8 testFindByLogin2(); // ユーザーが見つからない場合のテスト 9 } 10 11 public static void testFindByLogin1() { 12 Login login = new Login("user01","56789"); 13 14 DAO dao = new DAO(); 15 Acount result = dao.findByLogin(login); 16 17 if (result != null && 18 19 result.getUserId().equals("user01") && result.getPass().equals("56789")) { 20 System.out.println("findByLogin1:成功しました"); 21 } else { 22 System.out.println("findByLogin1:失敗しました"); 23 } 24 } 25 26 public static void testFindByLogin2() { 27 Login login = new Login("minato", "12345"); 28 DAO dao = new DAO(); 29 Acount result = dao.findByLogin(login); 30 if (result == null) { 31 System.out.println("findByLogin2:成功しました"); 32 } else { 33 System.out.println("findByLogin2:失敗しました"); 34 } 35 } 36}
sql
1create table ユーザーログイン情報 (ログインid character varying(20) 2 , パスワード character varying(20) 3 ) 4
sql
1INSERT INTO ユーザーログイン情報 values('user01','54321')
試したこと
lengthで文字数があるかどうかためしたところ0
nullで比較してもなし
補足情報(FW/ツールのバージョンなど)
eclipse Version: 2018-12 (4.10.0)
postgresql 11.1
あなたの回答
tips
プレビュー