java - SQL Server 存储过程和 jdbc

标签 java sql-server-2005 stored-procedures jdbc

我正在努力使用 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 查询。

最佳答案

尝试以下操作:

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

此外,我建议仅选择计数(select count(*) as cnt from ...),并使用类似 int count = rs.next() 的方法。 getInt("cnt");

关于java - SQL Server 存储过程和 jdbc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14332980/

相关文章:

mysql - 获取存储过程的 OUT BLOB 类型参数作为 TStream

java - 当 IntelliJ 找不到 Javadoc URL 末尾的 _ 或 __ 时,如何让 IntelliJ 检查它们?

Java Spring : get current mapping in the controller

java - 想学习搭建一个简单的java rest server

MYSQL游标循环,多跑一轮,为什么?

nhibernate - 流畅的 NHibernate 和存储过程

java - 插入后如何在链表中的节点之间建立连接

sql-server-2005 - Microsoft SQL Server 中存储过程与标量值函数的性能

sql - SQL Server 2005 中的交叉联接值

sql-server - SQL Server 2005 中 'CREATE USER' 所需的权限?