1
    public static int logIn(Statement stmt){
    int id;
    String pw;
    String select;
    boolean match;

    System.out.print("userID: ");
    id = input.nextInt();
    input.nextLine();
    System.out.print("password: ");
    pw = input.next();
    input.nextLine();

    select = "SELECT user_id, password FROM login WHERE user_id = " + id;

    try{
        ResultSet rs = stmt.executeQuery(select);
        while(rs.next()){
            if(id == rs.getInt(1) && pw.equals(rs.getString(2))){
                match = true;
            }
        }
    }
    catch(SQLException logfail){
        logfail.printStackTrace();
        System.out.println("could not print password");
    }

    if(match == true)
        return id;
    else break;
}

在我的程序中,用户将输入他们的登录信息。然后他们将面临一个菜单,他们在其中选择选项 1-7。选项 1-7 只是将在自己的数据上运行的各种查询。

我的登录功能是验证他们是谁,以便让他们访问自己的数据。如果验证通过,我会返回他们输入的 id 号,以便我可以将其传递给其他函数 (1-7)。

在我的 if-else 语句中,如果密码匹配,我希望它返回 ID 号,null如果失败则返回。

我知道这int不可能,null但我的这种方法的返回类型是int我能做什么?为了及时完成我的任务,如果不匹配表示登录失败,我将返回值 0。但是,对我来说更重要的是成为一名优秀的 Java 程序员,所以我想知道:

  1. 有一个更好的方法吗?和
  2. 既然有,我能做什么,怎么做?

谢谢!

4

7 回答 7

3

您可以做出的最简单的更改是 returnInteger和 return nullInteger是一个对象,这就是为什么你可以这样做。

或者,如果无法登录是错误,您可以抛出异常。这可能不是一个例外情况,所以这可能不是最好的方法。

可能你能做的最好的事情就是不返回 int/Integer。相反,有一个代表下一步要做的事情的类。

于 2013-06-04T00:14:17.270 回答
3

返回零或像 -1 这样的负值是一种可能性。您还可以创建一个检查异常LoginException,在登录凭据无效的情况下抛出该异常。这种方法的优点是你有一个很好的方法来记录错误登录尝试LoginException

于 2013-06-04T00:23:18.343 回答
2

任何时候你声明一个原始类型的函数,它都必须返回一个值或抛出一个异常。您可以使用包装器类型:Boolean、Integer、Long 等来返回 null,因为这些是 Java 中的“真实”对象。

于 2013-06-04T00:15:51.927 回答
0

当方法的返回类型为 时int,您必须返回一个int。要指示发生了错误,您可以返回一个无效的值或抛出异常。

于 2013-06-04T00:15:58.647 回答
0

不从方法返回的最好方法是抛出异常。当人们忘记检查它们时,返回 null 或零之类的错误值会导致错误的代码。异常是明确的,不能被忽略。

于 2013-06-04T00:17:52.153 回答
0

如果你声明了一个 int 类型的方法,它必须返回一个 int。只需声明/定义一个 invalid_return 变量,如果找不到匹配项,该变量将被返回,就这么简单。

于 2013-06-04T00:14:15.157 回答
0

真正明智的是,您应该通过将两者放在不同的方法中来将您的返回号码与您的查询分开。要返回 null,您需要从方法返回一个类,例如 ADT(抽象数据类型)。但是,当您可以简单地将 0 零标记为 null 并使用您在每次使用之前重置为 null 的 Integer 类变量时,这可能过于复杂,因此如果返回为零,您只需放入 if-else 来测试“整数”变量为 null 或包含重置为从方法返回为 int 的数字。

于 2013-06-04T01:17:11.580 回答