1

ログイン目的で使用されるユーザー名(一意のキー)とパスワードを持つテーブル(ログイン)があるとしましょう。

さて、登録モジュール(ログインテーブルに新しい行を追加して新しいアカウントを作成する)で、挿入を実行して、SQLException()が発生したときにユーザー名がすでにテーブルにあるかどうかを確認しても大丈夫ですか??? . それは良い習慣ですか?

登録モジュールの例を次に示します。

enter code here
String uname = request.getParameter("username");
String passwd = request.getParameter("password");
try
{
  statement.executeUpdate("insert into login(username,password) values (" + uname + "," + passwd + ")");
}
catch(SQLException e)
{
   if((e.getErrorCode())==1) //error code when primary key violated
   {
      // username already exists....
   }    
   //some other code
 }

 //username is available....rest of the code goes here

最初に、ユーザー名(ユーザーが登録中に入力したもの)がすでにテーブルにあるかどうかを確認する選択クエリを考えました....しかし、それは私には冗長に思えました

というのも、そうしてもDBMSが一意性違反をチェックするのを妨げないからですよね????

前もって感謝します。

4

2 に答える 2

1

SQLException.getErrorCode()のエラーコードを変更する基礎となるデータベースを変更する場合に備えて、挿入前に検証を行うことをお勧めします。これにより、ユーザーがフォームを送信する前に検証を行うこともできます。ユーザー名が既に使用されていることをサービスの呼び出し元に通知するカスタム例外を作成できます。

この SQLException オブジェクトのベンダー固有の例外コードを取得します。

SELECT COUNT(*) FROM LOGIN WHERE USERNAME = :username

たとえば、次のようなサービス メソッドを使用します。

public class UserService {

    public boolean isValidUsername(String username) {
        //validate
    }
    public void registerUser(User user) throws UsernameInUseException {
        if(!isValidUsername(user.getUsername()) {
            throw new UsernameInUseException("Usernaame " + user.getUsername() + " is already in use.");
        }
        // continue
    }

}
于 2012-05-17T06:03:39.997 に答える
0

フォームを送信する前に、AJAX 呼び出しを使用してユーザー名が既に存在することをユーザーに伝えることができれば、すばらしいでしょう。

于 2012-05-17T06:05:15.550 に答える