【发布时间】:2014-11-13 00:09:19
【问题描述】:
好的,我以前从来没有遇到过这个问题,所以我不知道如何措辞或修复它,我正在构建一个创建经销商的 java 应用程序,在该应用程序中我将参数传递给 DealerFactory.createDealer方法并继续首先使用如下所示的条件语句检查该经销商是否存在:
if (DealerFactory.fetchDealer(loginId).getLoginId().equals(loginId)) {
throw new Exception("Sorry That Dealer Already Exists");
} else if (DealerFactory.fetchDealer(loginId).getId().equals(DNo)){
throw new Exception("Sorry That Dealer Already Exists");
} else {
<< proceed with the rest of the method here >>
我以前见过这样做,以便检查用户名的可用性和被创建人的 id。但是,在运行它之后,我发现如果我创建了经销商并且条件评估为真,那么 if 语句就可以正常工作,让我知道我已经创建了一个已经存在的用户,我需要使用新的不同 ID 来创建他/她和用户名。但是,如果条件评估为假,我似乎永远不会将其放入语句的 else 部分,我没有收到任何错误,没有编译问题,也没有异常我已经以不同的方式编写了语句来尝试,这并不是真正的任何不同,只是在语法上看起来不同:
if (DealerFactory.fetchDealer(loginId).getLoginId().equals(loginId)
|| DealerFactory.fetchDealer(loginId).getId().equals(DNo)) {
throw new Exception("Sorry That Dealer Already Exists");
}
我已经包含了 println 语句来跟踪程序的运行,当条件评估为 false 时,我永远不会将它放入 else 语句中。我似乎无法弄清楚为什么当它被评估为假时它会破坏条件语句,有什么想法吗?
编辑:::
好的,这样我就可以帮助你们帮助我,哈哈,这里是完整的方法,我很抱歉没有首先发布它
public static int create(String DNo, String name, String admin,
String loginId, String password, String callSrc, String voiSys,
String whoCall, String callBrt, String active, String adfEmail)
throws SQLException, Exception {
int validateResult = 0;
if (DealerFactory.fetchDealer(loginId).getLoginId().equals(loginId)
|| DealerFactory.fetchDealer(loginId).getId().equals(DNo)) {
throw new Exception("Sorry That Dealer Already Exists");
}
try {
DealerFactory.pool = DBConnector.getInstance();
DealerFactory.connect = DBConnector.getConnection();
DealerFactory.preparedStatement = connect
.prepareStatement("Insert Into Dealers (DNo, Dealer, Admin, Login, Password, CallSrc, VoiSys, WhoC, CBrt, Active, ADFemail) "
+ "values(?,?,?,?,?,?,?,?,?,?,?)");
DealerFactory.preparedStatement.setString(1, DNo);
DealerFactory.preparedStatement.setString(2, name);
DealerFactory.preparedStatement.setString(3, admin);
DealerFactory.preparedStatement.setString(4, loginId);
DealerFactory.preparedStatement.setString(5, password);
DealerFactory.preparedStatement.setString(6, callSrc);
DealerFactory.preparedStatement.setString(7, voiSys);
DealerFactory.preparedStatement.setString(8, whoCall);
DealerFactory.preparedStatement.setString(9, callBrt);
DealerFactory.preparedStatement.setString(10, active);
DealerFactory.preparedStatement.setString(11, adfEmail);
validateResult = DealerFactory.preparedStatement
.executeUpdate();
} catch (SQLException ex) {
System.err.println("Error: " + ex + "\n");
ex.printStackTrace();
} finally {
DBUtils.closePrepStatement(DealerFactory.preparedStatement);
DealerFactory.pool.freeConnection(DealerFactory.connect);
}
return validateResult;
}
【问题讨论】:
-
如果经销商不存在,
DealerFactory.fetchDealer(loginId)不会返回null?如果不是,它返回什么? -
@JonathanDrapeau 是的,它会返回null,但是如果它为null,那不会因为它不等于当前输入而将它推到下一个语句吗?如果我错了,我会处理 null,但我以前从未处理过它,所以我不确定
-
DNo是什么类型,包含什么内容? -
不,它不会,它会抛出一个
NullPointerException,正如 nem 在他的回答中所说的那样。 -
@RichardDavy 不,如果您在
null上致电.getLoginId(),则不会。
标签: java performance debugging methods conditional-statements