我有一个GUI,它接收插入查询中的字段。当字段为空时,当字段与指定的类型不匹配时,预期java会抛出格式异常。但是,我希望用户知道输入无效。有没有办法验证在预准备语句中插入的字段何时为空?
段:
String query = "DELETE FROM racewinners WHERE racename = ? "
+ "AND raceyear = ? AND ridername = ? "
+ "AND distance = ? " + "AND winning_time = ?";
try {
statement = connection.prepareStatement(query);
statement.setString(1, race_name);
statement.setInt(2, race_year);
statement.setString(3, rider_name);
statement.setInt(4, distance);
statement.setObject(5, winning_time);
} catch(SQLException e) {
System.out.println(e1.getMessage());
}
答案 0 :(得分:1)
要检查null
,自Java 7以来,您所要做的就是
Objects.requireNonNull(someVariable);
或使用您可以指定消息的overloaded method。如果传递的参数是null
,则该方法将抛出异常。
对于任何其他自定义逻辑,您必须编写自己的验证器。
像
这样的东西public interface Validator<T> {
public void validate(T object, Errors errors);
}
public class RaceInfoValidator implements Validator<RaceInfo> {
public void validate(RaceInfo raceInfo, Error errors) {
if (raceInfo.getRaceName() == null) {
errors.addError("Must provide a race name.";
} else if (raceInfo.getRaceName().isEmpty()) {
errors.addError("The race name must not be empty.";
}
// etc.
}
}
...
String race_name = ...;
...
RaceInfo raceInfo = new RaceInfo(race_name, ...);
RaceInfoValidator validator = ...;
Errors errors = ...; // write some implementation
validator.validate(raceInfo, errors);
if (errors.hasErrors()) {
// show user the errors
}
或者,您可以将此验证放在数据库表模式中,但我不推荐它。