返回值的问题

y1018799688 2012-06-06 04:46:00

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,为什么??
...全文
186 13 打赏 收藏 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
纵一苇也 2012-06-08
  • 打赏
  • 举报
回复
返回值必须要加,至于返回为false的问题,那是你把return的值设为false了,肯定每次都返回false
土豆的老公 2012-06-06
  • 打赏
  • 举报
回复
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();

} }
淡定的峰哥 2012-06-06
  • 打赏
  • 举报
回复
如果现在不管什么情况都返回false,那就说明查询不到记录,那你要检查一下
mb.getUsername()这个里面是否是null
神之白羊 2012-06-06
  • 打赏
  • 举报
回复
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();
}
}
Seanake 2012-06-06
  • 打赏
  • 举报
回复
加就加在catch块中
Seanake 2012-06-06
  • 打赏
  • 举报
回复
不加没报错啊
Seanake 2012-06-06
  • 打赏
  • 举报
回复
不加可以.
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;
}
}
}
蘑菇頭 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

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

正解…… 对的……
huan_lxyd 2012-06-06
  • 打赏
  • 举报
回复
这段代码返回的一直都是false
执行的else吧
qybao 2012-06-06
  • 打赏
  • 举报
回复
出异常后没有返回值了,所以不加不行,把它加在catch的地方,或者用个变量 boolean flag = false;
在你的if next成功了设置 flag = true; 在最后返回flag就可以了
y1018799688 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
楼主,这是很基础的知识啊,不加肯定不行。假如你的try块里发生了异常,程序流程直接跳到了catch块中,那么你这个方法还能有返回值吗?答案是不能!所以,必须得在try块外面有一个return,来保证即使发生异常,方法也能返回。至于这个try块外的return,其实你也可以把它加到catch块中
[/Quote]
了解,还有一个问题,就是这段代码返回的一直都是false,我的目的是验证账号和密码是否在数据库里面有
tengfeng05 2012-06-06
  • 打赏
  • 举报
回复
楼主,这是很基础的知识啊,不加肯定不行。假如你的try块里发生了异常,程序流程直接跳到了catch块中,那么你这个方法还能有返回值吗?答案是不能!所以,必须得在try块外面有一个return,来保证即使发生异常,方法也能返回。至于这个try块外的return,其实你也可以把它加到catch块中

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧