1

SQL Server 2005 と JDBC に苦労しています。私はストアドプロシージャを持っています:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER proc [dbo].[sp_logincheck]
    @username as nvarchar(50),
    @password as nvarchar(50)
as
begin
    select * 
    from users 
    where user_name = @username 
      and password = @password 
      and is_active = 'Yes'
end

そして私のUserクラスは次のとおりです。

import java.sql.*;

public class User {
    private String username;

    private User(String username){
        this.username = username;
    }

    public static User login(String username, char [] password) throws SQLException{
        if(username == null || password == null){
            throw new IllegalArgumentException("Illegal arguments passed to method");
        }
        if(login1(username, password)){
            return new User(username);
        }
        return null;
    }

    private static boolean login1(String username, char [] password) throws SQLException{
        Connection connection = null;
        CallableStatement statement = null;
        try{
            connection = DriverManager.getConnection(AppParameters.dbURL, AppParameters.dbUsername, AppParameters.dbPassword);
        }catch(SQLException e){
            throw e;
        }
        try{
            statement = connection.prepareCall("{ ? = call dbo.sp_logincheck(?,?) }");
            statement.registerOutParameter(1, Types.INTEGER);
            statement.setString(2, username);
            statement.setString(3, new String(password));
            statement.execute();
            if(statement.getInt(1) == 1){
                System.out.println("Login Successfull");
                return true;
            }
            System.out.println("Login Failed");
            return false;
        }catch(SQLException sqle){
            sqle.printStackTrace();
            throw sqle;
        }finally{
            try{
                statement.close();
            }catch(Exception e){
            }
            try{
                connection.close();
            }catch(Exception e){
            }
        }
    }

    public  String getUsername(){
        return username;
    }
}

呼び出しlogin()メソッドは常に出力しLogin Failedます。SQL Server でストアド プロシージャを使用し、JDBC を使用してユーザー ログインを実行するにはどうすればよいですか? それとも、生の SQL ステートメントを使用する方がよいでしょうか? これについて私を案内してください。

編集:

また、ストアド プロシージャ内にクエリResultSetがあるため、上記のストアド プロシージャからを取得する方法も知りたいです。select

4

3 に答える 3

1

次のことを試してください。

ResultSet rs = statement.executeQuery();
if (! rs.isLast()) {
    // match
} else {
    // no match
}

また、カウント ( select count(*) as cnt from ...) のみを選択して、次のように使用することをお勧めします。int count = rs.next().getInt("cnt");

于 2013-01-15T09:22:31.297 に答える
1

select * from users...SQL ステートメントをselect count(*) from users...ストアド プロシージャに変更してみてください。

そうでなければ、あなたの表現if(statement.getInt(1) == 1){は何の意味もありません。

于 2013-01-15T07:39:01.457 に答える
0

もしも

statement.getInt(1)
結果の行数に等しいか、少なくとも1つの行があります。その場合、これはデータの不一致の場合である可能性があります。何もデータが見つかりませんでした

于 2013-01-15T09:13:55.967 に答える