2016-04-10 10 views
0

AccountCheckメソッドは常にfalseを返し、「アカウントが存在します!常に。既存のアカウントがデータベースにあるかどうかを確認し、そうでないアカウントを作成することをお勧めします。助けてください。私はコード内で検証を行っていません。select count(*)は、既存のアカウントに関係なくtrueを返します。

private boolean AccountCheck(String username, String password) { 

    try { 

     String sql = "select count(*) from user where username=? and password=?"; 

     PreparedStatement pst = conn.prepareStatement(sql); 
     pst.setString(1, username); 
     pst.setString(2, password); 
     ResultSet rs = pst.executeQuery(); 

     if (rs.next()) { 

      rs.close(); 
      System.out.println("Account exists!"); 
      return false; 

     } else { 

      rs.close(); 
      System.out.println("Accout does not exist!"); 
      return true; 
     } 

    } catch (SQLException e) { 

     e.printStackTrace(); 
     return false; 
    } 

} 

答えて

1

レコードが存在しなくても、カウントは "0"を出力として返します。したがって、rs.next()は常にtrueを返します。

ソリューション:

はあなたが*代わりのcount(*)を使用する場合、それはあなたがcountを照会されると、それは常に返します任意のレコード

+0

ありがとうございます、今すぐ試してみてください! –

+0

ありがとう、それは働いた。私はそれを感謝します:) –

1

を返しません

select * from user where username=? and password=?

select count(*) from user where username=? and password=?を交換してください1つのレコード(アカウントが存在しない場合は値0)、この場合、常にifに入ります。結果セットからのカウントを取得し、値をチェックselect * from user where username=? and password=?

  • String sql = "select count(*) as count from user where username=? and password=?";

    1. 変更カウント(*)の*、例えば:私たちは、以下のそれを動作させるために、変更の枯れることができます PreparedStatement pst = conn.prepareStatement(sql); pst.setString(1, username); pst.setString(2, password); ResultSet rs = pst.executeQuery(); if (rs.next() && rs.getInt("count") > 0) { rs.close(); System.out.println("Account exists!"); return false; } else { rs.close(); System.out.println("Accout does not exist!"); return true; }

    また、あなたはSO CLOする方法について答えるthisを見てすることができますse PreparedStatementおよびResultSetオブジェクトです。

  • +0

    ありがとう!私は今コードを試しています。 –

    +0

    ありがとう、それは私がそれを感謝した:) –

    関連する問題