验证预准备语句中的空字段

时间:2014-04-06 19:12:44

标签: java sql oracle jdbc

我有一个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());
    }

1 个答案:

答案 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
}

或者,您可以将此验证放在数据库表模式中,但我不推荐它。