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

Java 验证准备语句中的空字段,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我有一个GUI,它接受在查询中插入的字段。当字段为空时,当字段与指定类型不匹配时,java会引发格式异常。但是,我想让用户知道输入是无效的。是否有一种方法可以验证在准备好的语句中插入的字段是否为空 片段: String query = "DELETE FROM racewinners WHERE racename = ? " + "AND raceyear = ? AND ridername = ? " + "AND distance = ? " + "AND winning_time

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

要检查
null
,自Java7以来,您只需

Objects.requireNonNull(someVariable);
或者使用可以指定消息的位置。如果传递的参数为
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
}
公共接口验证程序{
公共无效验证(T对象、错误);
}
公共类RaceInfoValidator实现验证器{
公共无效验证(RaceInfo RaceInfo,错误){
if(raceInfo.getRaceName()==null){
错误。addError(“必须提供比赛名称。”);
}else if(raceInfo.getRaceName().isEmpty()){
errors.addError(“比赛名称不能为空。”;
}
//等等。
}
}
...
字符串race_name=。。。;
...
RaceInfo RaceInfo=新的RaceInfo(种族名称,…);
RaceInfoValidator验证程序=。。。;
Errors=…;//编写一些实现
validator.validate(raceInfo,错误);
if(errors.hasErrors()){
//向用户显示错误
}


或者,您可以将此验证放在数据库表架构中,但我不建议这样做。

您可以在表架构中作为
非null
进行验证,但理想情况下,您可以在应用程序逻辑中进行验证。如果任何一个输入是
null
,只需抛出一个异常。请使用
对象。requirennoull
。我不理解还有你的问题。是什么阻止了你写这种验证?@SotiriosDelimanolis你能举例说明一下吗。通过调用
.getText()验证空字段很容易.length==0
但在本例中略有不同。这些字段应具有该类型。我如何检查这些字段中的任何一个是否为空?这可能在查询中吗?@PM77-1我不确定如何处理这种情况。我不希望引发formatException。相反,我希望通知用户这些字段为null和或为空。如果您不想让用户暴露于Java运行时异常,请自己捕获它们,然后抛出您自己的异常,或者选择任何其他方式与用户通信。因此,在本例中,我将传入
语句
。至于消息,我将使用JOptionPane。@TheGrayFox,据我所知,我在您的问题中,您想检查
race\u name
race\u year
等是否为
null
。这就是您要通过的。这将是大量重复,让我进一步研究这个方法。formatException仍然会被抛出。我基本上不希望发生这种情况,并让验证人员通知我空字段。@ThEGRAYFox考虑将所有的逻辑封装在<代码>验证器类中。好主意,这将导致一些抽象。我只是不知道如何开始。你能举个例子,让我有一个关于如何正确设置这个想法。谢谢你的反馈。