Java 验证Excel导入的数据

Java 验证Excel导入的数据,java,apache-poi,validation,Java,Apache Poi,Validation,我正在使用ApachePOI框架导入一个包含30列的excel工作表。我正在读取每个单元格并将其插入数据库 除了使用多个if-else条件并为每个列调用不同的方法之外,我需要针对不同的条件验证这些列中的每一列。还有其他方法吗?我对java的经验较少。有多种方法可以解决您的问题。然而,我使用Strategy模式设计了一个通用的验证类,它可以用于不同类型的项目,而不会出现丑陋的if-else块。虽然我必须为不同类型的字段创建单独的验证方法,但我觉得这比使用大量if-else块要好 interface

我正在使用ApachePOI框架导入一个包含30列的excel工作表。我正在读取每个单元格并将其插入数据库


除了使用多个if-else条件并为每个列调用不同的方法之外,我需要针对不同的条件验证这些列中的每一列。还有其他方法吗?

我对java的经验较少。有多种方法可以解决您的问题。然而,我使用Strategy模式设计了一个通用的验证类,它可以用于不同类型的项目,而不会出现丑陋的if-else块。虽然我必须为不同类型的字段创建单独的验证方法,但我觉得这比使用大量if-else块要好

interface IValidator<T> {
  boolean validate(T field);
}

class SomeFieldOne<T> implements IValidator<T> {
  public boolean validate(T field) {
    print("SomeFieldOne validation");
    return true; // return true/false based on validation
  }
}

class SomeFieldTwo<T> implements IValidator<T> {
  public boolean validate(T field) {
    print("SomeFieldTwo validate");
    return true; // return true/false based on validation
  }
}

class Context {
  private IValidator validator;

  public Context(IValidator validator) {
    this.validator = validator;
  }

  public boolean validate(String field) {
    return this.validator.validate(field);
  }
}

public class TestValidation {
  public static void main(String[] args) {
    Context context;

    context = new Context(new SomeFieldOne());
    print(context.validate("some field one"));

    context = new Context(new SomeFieldTwo());
    print(context.validate("some field two"));

    // test other fields ....
    // .........
  }
}
接口IValidator{
布尔验证(T字段);
}
类SomeFieldOne实现IValidator{
公共布尔验证(T字段){
打印(“SomeFieldOne验证”);
return true;//根据验证返回true/false
}
}
类SomeFieldTwo实现IValidator{
公共布尔验证(T字段){
打印(“SomeFieldTwo验证”);
return true;//根据验证返回true/false
}
}
类上下文{
专用IValidator验证器;
公共上下文(IValidator验证器){
this.validator=验证程序;
}
公共布尔值验证(字符串字段){
返回此.validator.validate(字段);
}
}
公共类测试验证{
公共静态void main(字符串[]args){
语境;
context=newcontext(newsomefieldone());
打印(context.validate(“某个字段一”);
context=newcontext(newsomefieldtwo());
打印(context.validate(“某些字段二”);
//测试其他字段。。。。
// .........
}
}

Hi Ravi上提供了对该答案的回顾和改进,感谢您的回答。因此,我尝试了这种方法,创建了列名和其中的validator对象的映射,因此选择了适当的validator类。然而,在这样做时,我无法调用EJB中编写的另一个函数。根据我对EJB的有限理解,我理解这个问题是因为我自己创建对象并将其推到映射。你知道如何解决这个问题吗?@coder我对使用EJB没有太多的知识,但我建议你仔细检查堆栈跟踪,并试图找出到底是什么导致了这个问题。如果您仍然无法理解,我认为您可以在SO中提出另一个问题,并显示错误消息。