public boolean isManagerExist() throws SQLException {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://localhost:1433;DasebaseName=StudentSystem";
conn = DriverManager.getConnection(url, "yu", "yuminghaoop");
PreparedStatement pstmt = conn
.prepareStatement("select username,password from manager where username = ?");
pstmt.setString(1, mb.getUsername());
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
rs.close();
conn.close();
pstmt.close();
return true;
} else {
rs.close();
pstmt.close();
conn.close();
return false;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
             return false; //不加这句就报错,应该可以不加才对吧?
}这段代码,如果不在最后一个花括号之前返回一个值则会报错,加上之后返回的值一直都是false,为什么??

解决方案 »

  1.   

    楼主,这是很基础的知识啊,不加肯定不行。假如你的try块里发生了异常,程序流程直接跳到了catch块中,那么你这个方法还能有返回值吗?答案是不能!所以,必须得在try块外面有一个return,来保证即使发生异常,方法也能返回。至于这个try块外的return,其实你也可以把它加到catch块中
      

  2.   

    了解,还有一个问题,就是这段代码返回的一直都是false,我的目的是验证账号和密码是否在数据库里面有
      

  3.   

    出异常后没有返回值了,所以不加不行,把它加在catch的地方,或者用个变量 boolean flag = false;
    在你的if next成功了设置 flag = true; 在最后返回flag就可以了
      

  4.   

    这段代码返回的一直都是false
    执行的else吧
      

  5.   

    不加可以.
    public boolean isManagerExist() throws SQLException {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    String url =  "jdbc:sqlserver://localhost:1433;DasebaseName=StudentSystem";
    try (Connection conn = DriverManager.getConnection(url, "yu",
    "yuminghaoop");
    PreparedStatement pstmt = conn
    .prepareStatement("select username,password from manager where username = ?");) { pstmt.setString(1, mb.getUsername());
    ResultSet rs = pstmt.executeQuery();
    if (rs.next()) {

    return true;
    } else {
    return false;
    }
    }
    }
      

  6.   

    public boolean isManagerExist() throws SQLException {
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                String url = "jdbc:sqlserver://localhost:1433;DasebaseName=StudentSystem";
                conn = DriverManager.getConnection(url, "yu", "yuminghaoop");
                PreparedStatement pstmt = conn
                        .prepareStatement("select username,password from manager where username = ?");
                pstmt.setString(1, mb.getUsername());
                ResultSet rs = pstmt.executeQuery();
                if (rs.next()) {
                    return true;
                }
               return false;
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
           finally
    {
    rs.close();
                    pstmt.close();
                    conn.close();
    }
        }
      

  7.   

    如果现在不管什么情况都返回false,那就说明查询不到记录,那你要检查一下
    mb.getUsername()这个里面是否是null
      

  8.   

    public boolean isManagerExist() throws SQLException {
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                String url = "jdbc:sqlserver://localhost:1433;DasebaseName=StudentSystem";
                conn = DriverManager.getConnection(url, "yu", "yuminghaoop");
                PreparedStatement pstmt = conn
                        .prepareStatement("select username,password from manager where username = ?");
                pstmt.setString(1, mb.getUsername());
                ResultSet rs = pstmt.executeQuery();
                if (rs.next()) {
                    rs.close();
                    conn.close();
                    pstmt.close();
                    return true;
                } else {
                    rs.close();
                    pstmt.close();
                    conn.close();
                    return false;
                }
            }finally{
    //关闭一般都写这  不catch就可以不用返回
                      rs.close();//最好判断是否为空
                    conn.close();
                    pstmt.close();}     }
      

  9.   

    返回值必须要加,至于返回为false的问题,那是你把return的值设为false了,肯定每次都返回false