根据用户输入集查询数据库-JAVA

根据用户输入集查询数据库-JAVA,java,swing,validation,Java,Swing,Validation,我对编程很陌生。我正在开发一个应用程序,它有6个字段供用户输入,根据输入的输入,我必须从数据库中查询行 这是我的形象 我有以下输入组合: 一个月 B编号 编号 a编号,开始日期/时间 a编号,b编号,开始日期/时间 B编号,开始日期/时间 a编号,开始日期/时间,结束日期/时间 B编号、开始日期/时间、结束日期/时间 a编号,b编号,开始日期/时间,结束日期/时间 用户可以用我上面描述的所有方式输入。我必须根据用户输入查询数据库 假设用户输入一个数字,那么我的查询将是 从表名称中选择*,其

我对编程很陌生。我正在开发一个应用程序,它有6个字段供用户输入,根据输入的输入,我必须从数据库中查询行

这是我的形象

我有以下输入组合:

  • 一个月
  • B编号
  • 编号
  • a编号,开始日期/时间
  • a编号,b编号,开始日期/时间
  • B编号,开始日期/时间
  • a编号,开始日期/时间,结束日期/时间
  • B编号、开始日期/时间、结束日期/时间
  • a编号,b编号,开始日期/时间,结束日期/时间
用户可以用我上面描述的所有方式输入。我必须根据用户输入查询数据库

假设用户输入一个数字,那么我的查询将是

从表名称中选择*,其中Anumber='input'

如果用户同时输入一个数字和一个数字,那么我的查询将是

从表名称中选择*,其中Anumber='input'和bnumber='input2'

等等

我正在分享我的一些代码,以了解人们我到底在做什么,还有什么可以做得更好

if (TextAnumber.isEmpty() && TextBnumber.isEmpty() && StrUserStartDate.isEmpty() && StrUserStartTime.isEmpty()
                && StrUserEndDate.isEmpty() && StrUserEndTime.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Please Enter At Least One Input");
        }

        if (StrUserStartDate.isEmpty() && !StrUserStartTime.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Please Enter Start Date");
        }
        if (!StrUserStartDate.isEmpty() && StrUserStartTime.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Please Enter Start Time");
        }

        if (StrUserEndDate.isEmpty() && !StrUserEndTime.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Please Enter End Date");
        }
        if (!StrUserEndDate.isEmpty() && StrUserEndTime.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Please Enter End Time");
        }

        if (!StrUserEndDate.isEmpty() && !StrUserEndTime.isEmpty() && StrUserStartDate.isEmpty()
                && StrUserStartTime.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Please Enter Start Date/Time");
        }

        if (!TextAnumber.isEmpty() && TextBnumber.isEmpty() && StrUserStartDate.isEmpty() && StrUserEndDate.isEmpty()) {
            ResultSet rs = stmt.executeQuery(
                    "select anumber,bnumber FROM CDR WHERE ANUMBER = '" + TextAnumber + "' ORDER BY ANUMBER");
            while (rs.next()) {
                graphNodeA = rs.getString("ANUMBER");
                graphNodeB = rs.getString("BNUMBER");
                graph.addNode(graphNodeA);
                graph.addNode(graphNodeB);
                i++;
                graph.addEdge("string" + i, graphNodeA, graphNodeB);
            }
        }
        if (TextAnumber.isEmpty() && !TextBnumber.isEmpty() && StrUserStartDate.isEmpty() && StrUserEndDate.isEmpty()) {
            ResultSet rs = stmt.executeQuery(
                    "select anumber,bnumber FROM CDR WHERE ANUMBER = '" + TextBnumber + "' ORDER BY BNUMBER");
            while (rs.next()) {
                graphNodeA = rs.getString("BNUMBER");
                graphNodeB = rs.getString("ANUMBER");
                graph.addNode(graphNodeA);
                graph.addNode(graphNodeB);
                i++;
                graph.addEdge("string" + i, graphNodeA, graphNodeB);
            }
        }
        if (!TextAnumber.isEmpty() && !TextBnumber.isEmpty() && StrUserStartDate.isEmpty()
                && StrUserEndDate.isEmpty()) {
            ResultSet rs = stmt.executeQuery("select anumber,bnumber FROM CDR WHERE ANUMBER = '" + TextAnumber
                    + "' AND BNUMBER = '" + TextBnumber + "' ORDER BY ANUMBER");
            while (rs.next()) {
                graphNodeA = rs.getString("ANUMBER");
                graphNodeB = rs.getString("BNUMBER");
                graph.addNode(graphNodeA);
                graph.addNode(graphNodeB);
                i++;
                graph.addEdge("string" + i, graphNodeA, graphNodeB);
            }
        }
为此,我使用了
If/Else
,这对我来说非常复杂,而且代码看起来非常粗糙

我想要的是,是否有更好的解决此类问题的方法?
我希望在此澄清我的问题:)

为了改进代码,我的建议是使用Hibernate标准。它不仅可以改进代码,还可以防止应用程序出现问题,例如sql注入。例如,假设表的hibernate类为CDR.java,则可以按如下所示处理查询:

    Criteria cr = session.createCriteria(CDR.class);
    if (!TextAnumber.isEmpty()) {
       cr.add(Restrictions.eq("ANUMBER", TextAnumber));
    }
    if (!TextBnumber.isEmpty()) {
       cr.add(Restrictions.eq("BNUMBER", TextBnumber));
    }
    //make sure to format your date to the right format
    if (!StrUserStartDate.isEmpty().isEmpty()) {
        cr.add(Restrictions.gt("StartDate",StrUserStartDate));
    }
    if (!StrUserEndDate.isEmpty().isEmpty()) {
      cr.add(Restrictions.lt("EndDate",StrUserEndDate));
    }

    List results = cr.list();
另一个改进是为重复代码创建新方法,以提高可读性和修复错误

有关hibernate的更多信息,请参阅以下文档:

下面是一个关于它的很棒的教程:
要改进代码,我的建议是使用Hibernate标准。它不仅可以改进代码,还可以防止应用程序出现问题,例如sql注入。例如,假设表的hibernate类为CDR.java,则可以按如下所示处理查询:

    Criteria cr = session.createCriteria(CDR.class);
    if (!TextAnumber.isEmpty()) {
       cr.add(Restrictions.eq("ANUMBER", TextAnumber));
    }
    if (!TextBnumber.isEmpty()) {
       cr.add(Restrictions.eq("BNUMBER", TextBnumber));
    }
    //make sure to format your date to the right format
    if (!StrUserStartDate.isEmpty().isEmpty()) {
        cr.add(Restrictions.gt("StartDate",StrUserStartDate));
    }
    if (!StrUserEndDate.isEmpty().isEmpty()) {
      cr.add(Restrictions.lt("EndDate",StrUserEndDate));
    }

    List results = cr.list();
另一个改进是为重复代码创建新方法,以提高可读性和修复错误

有关hibernate的更多信息,请参阅以下文档:

下面是一个关于它的很棒的教程:

有什么问题吗?这可能更适合你,有什么问题吗?这可能更适合于。