h2databaseです。
cosoleにエラーはでていないのですが、
testExecute1:失敗しました。
testExecute2:成功しました。
となってしまいます。
自分の考えとしては、LoginLogicでのselectで値を得ることができていないのですが、
//SELECT文を準備
String sql="SELECT USER_ID,PASS,MAIL,NAME,AGE FROM ACCOUNT WHERE USER_ID=? AND PASS=?";
PreparedStatement pStmt=conn.prepareStatement(sql);
pStmt.setString(1,login.getUserId());
pStmt.setString(2, login.getPass());
しかし、このコード内のSELECT USER_ID,PASS,MAIL,NAME,AGE FROM ACCOUNT をh2databaseで実行すると、しっかりと一覧表が出力されます。
そのため、pStmt.setString(1,login.getUserId());
pStmt.setString(2, login.getPass()); のgetUserや、getPassができていないのかと思い、login.javaをみて、loginメソッドや、getPassメソッドや、getUserメソッドを確認したのですが、問題はありませんでした。
!!!!!!----LoginLogicTestです。
package test;
import model.Login;
import model.LoginLogic;
public class LoginLogicTest {
public static void main(String[] args){
testExecute1();//ログイン成功のテスト
testExecute2();//ログイン失敗のテスト
}
public static void testExecute1(){
Login login=new Login("minato","1234");
LoginLogic bo=new LoginLogic();
boolean result=bo.execute(login);
if(result){
System.out.println("testExecute1:成功しました。");
}else{
System.out.println("testExecute1:失敗しました。");
}
}
public static void testExecute2(){
Login login =new Login("minato","12345");
LoginLogic bo=new LoginLogic();
boolean result=bo.execute(login);
if(!result){
System.out.println("testExecute2:成功しました。");
}else{
System.out.println("testExecute2:失敗しました。");
}
}
}
!!!!!-----LoginLogicTestはここまでです。
!!!!!-----Login.javaです。
package model;
public class Login {
private String userId;
private String pass;
//Loginメソッド public Login(String userId,String pass){ this.userId=userId; this.pass=pass; } //getUserId・getPassメソッド public String getUserId(){return userId;} public String getPass(){return pass;}
}
!!!!!----Login.javaはここまでです。
!!!!!-----AccountDAOです。
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import model.Account;
import model.Login;
public class AccountDAO {
@SuppressWarnings("finally")
//findByLoginメソッド
public Account findByLogin(Login login){
Connection conn=null;
Account account=null;
try{
//JDBCドライバを読み込み
Class.forName("org.h2.Driver");
//データベースに接続 conn=DriverManager.getConnection("jdbc:h2:file:/Users/taichi/Documents/networkspace/newsns/h2data.dat","sa",""); //SELECT文を準備 String sql="SELECT USER_ID,PASS,MAIL,NAME,AGE FROM ACCOUNT WHERE USER_ID=? AND PASS=?"; //ちょっと複雑 PreparedStatement pStmt=conn.prepareStatement(sql); pStmt.setString(1,login.getUserId()); pStmt.setString(2,login.getPass()); //SELECT文を実行し、結果表を取得 ResultSet rs=pStmt.executeQuery(); //一致したユーザーが存在した場合 //そのユーザーを表すAccountインスタンスを生成 if(rs.next()){ //結果表からデータを取得 String userId=rs.getString("USER_ID"); String pass=rs.getString("PASS"); String mail=rs.getString("MAIL"); String name=rs.getString("NAME"); int age=rs.getInt("AGE"); //これで作る、これはクラスの引数 account=new Account(userId,pass,mail,name,age); } }catch(SQLException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); return null; }finally{ //データベースを切断 if(conn!=null){ try{ conn.close(); }catch(SQLException e){ e.printStackTrace(); return null; } } //見つかったユーザーまたは、nullを返す。 return account; }
}
//creteメソッド
public boolean create(Account account){
Connection conn=null;
try{
//データベースへ接続
conn=DriverManager.getConnection("jdbc:h2:file:/Users/taichi/Documents/networkspace/newsns/h2data.dat","sa","");
//insert文の準備(idは自動連番なので、指定しなくてもいい) String sql="ISERT INTO ACCOUNT (USER_ID,PASS,MAIL,NAME,AGE)VALUES(?,?,?,?,?)"; PreparedStatement pStmt=conn.prepareStatement(sql); //insert文中の「?」に使用する値を指定し、SQL文を完成 pStmt.setString(1, account.getUserId()); pStmt.setString(2, account.getPass()); pStmt.setString(3, account.getMail()); pStmt.setString(4, account.getName()); pStmt.setInt(5, account.getAge()); //insert文を実行 int result=pStmt.executeUpdate(); if(result !=1){ return false; }
}catch(SQLException e){
e.printStackTrace();
return false;
}finally{
//データベースを切断
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
return true;
}
}
!!!!!---AccountDAOはここまでです。
!!!!!-----LoginLogic.javaです。
package model;
import dao.AccountDAO;
public class LoginLogic{
//executメソッド public boolean execute(Login login){ AccountDAO dao=new AccountDAO(); Account account=dao.findByLogin(login); return account !=null; }
}
!!!!!-----LoginLogic.javaはここまでです。
どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/28 07:51 編集
2015/11/28 08:40
2015/11/28 09:45
2015/11/28 10:50
2015/11/28 11:14
2015/11/28 12:00
2015/11/28 12:24
2015/11/28 13:59
2015/11/28 14:04
2015/11/28 14:14
2015/11/29 00:48
2015/11/29 00:53
2015/11/29 01:10
2015/11/29 01:36
2015/11/29 01:55
2015/11/29 02:05
2015/11/29 03:00
2015/11/29 03:11
2015/11/29 03:55
2015/11/29 04:16
2015/11/29 04:24
2015/11/29 04:24
2015/11/29 04:27
2015/11/29 04:34
2015/11/29 04:37
2015/11/29 04:40 編集
2015/11/29 04:51 編集
2015/11/29 04:53
2015/11/29 04:59
2015/11/29 05:05
2015/11/29 07:21
2015/11/29 07:26
2015/11/29 07:47
2015/11/29 07:58
2015/11/29 09:45 編集
2015/11/29 09:53
2015/11/29 10:00
2015/11/29 10:08
2015/11/29 10:34
2015/11/29 10:41
2015/11/29 11:00
2015/11/29 11:02
2015/11/29 11:25
2015/11/29 11:27
2015/11/29 11:31
2015/11/29 11:43
2015/11/29 11:51
2015/11/29 11:53
2015/11/29 11:55
2015/11/29 11:57
2015/11/29 12:02
2015/11/29 12:15
2015/11/29 12:19
2015/11/29 12:28 編集
2015/11/29 13:10
2015/11/29 13:15
2015/11/29 13:19
2015/11/29 13:23
2015/11/29 13:30
2015/11/29 13:52
2015/11/29 14:10
2015/11/29 15:03
2015/11/29 15:10
2015/11/29 15:18