如何使用带有日期的用户参数在Java中编写MySQL查询

时间:2013-09-27 12:02:12

标签: java mysql sql database jdbc

首先,感谢您之前的帮助和建议。我只是在学习数据库和MySQL,所以请问我这么重要的新手类问题。

我正在输入2个参数,一个是字符串,另一个是日期。然后我想输出另一个值。字符串很直接,但我无法正确比较日期。如果日期和字符串匹配那么这就是我正在寻找的记录

这是表格的副本

    private String agentDetail = "CREATE TABLE AgentDetail (" 
        + "idNo INT(64) NOT NULL AUTO_INCREMENT,"  
        + "initials VARCHAR(2)," 
        + "agentDate DATE,"  
        + "agentCount INT(64), "
        + "PRIMARY KEY(idNo))"; 

问题在于它总是会带回所有日期,包括正确和错误的结果

这是我目前正在使用的代码

    protected void getAgentIdNo (Connection con, PreparedStatement preStatement,
                ResultSet result, String initials, Date myDate) {
        try {
            preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL");
            result = preStatement.executeQuery();

            while (result.next()) {
                if (result.getString("initials").equals(initials)){
                    if (myDate.compareTo(result.getDate("agentDate")) == 0){
                        System.out.println("The date and initials matched !!");
                        System.out.println("The id no is " + result.getint("idNo");
                    }
                }
            }
        }

        catch (SQLException ex) {
            System.out.println("An error occured when reading from the data base");
            ex.printStackTrace();
        }
    }

我也知道这段代码远非完美,所以建议使用更专业的代码。 提前感谢所有的帮助和支持。

3 个答案:

答案 0 :(得分:1)

这是一个坏主意。这是做到这一点的方法:

   preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL WHERE initials = ? AND angetDate = ?");
   preStatment.setSring(1, initials);
   preStatment.setDate(2, new java.sql.Date(date.getTime()));

答案 1 :(得分:0)

我建议(在这种情况下,进行SQL查询)而不是使过滤器programaticaly。

您可以执行以下操作:

protected void getAgentIdNo (Connection con, PreparedStatement preStatement,
                ResultSet result, String initials, Date myDate) {
        try {
            preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL as ag WHERE ag.initial = ? AND date = ?");
            preStatment.setSring(1,initials);
            preStatment.setString(2,date);
            result = preStatement.executeQuery();

        while (result.next()) {
                    System.out.println("The date and initials matched !!");
                    System.out.println("The id no is " + result.getint("idNo");
            }
        }
    }

    catch (SQLException ex) {
        System.out.println("An error occured when reading from the data base");
        ex.printStackTrace();
    }
}

Att:有关详细信息,请参阅this链接。

希望它有助于^^

答案 2 :(得分:0)

首先,

我要感谢那些阅读,审核并提交了糟糕黑客工作的人。 出现了两种不同的思想流派,我当然都试过了。尝试不同的方法很棒。

我发现,对于我在寻找工作时正在编写的代码,这非常干净。然而,其他回应也让我调查了其他机会。

该段是更大系统的一部分,我正在编写以增加我的工作组合,我正在做的是使用Java创建一个可视界面,它只会为一个 idNo 分配一个用户每天。然后,用户可以进入并且在另一段代码中被给予机会手动输入客户编号或者可选地生成一个客户编号。这就是 idNo agentCount 号码的用武之地。顺便说一句,我发现命令行代码编程更容易。 : - )

    protected void getAgentIdNo (Connection con, PreparedStatement preStatement, ResultSet result, AgentDetail ageDet) {
        try {
            preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL as ag WHERE ag.initials = ? AND ag.agentDate = ?");
            preStatement.setString(1,ageDet.getInitials());
            preStatement.setDate(2,ageDet.getMyDate());
            result = preStatement.executeQuery();

            while (result.next()) {
                ageDet.setAgeIdNo(result.getInt("idNo"));
                ageDet.setAgeCount(result.getInt("agentCount"));
            }
        }

        catch (SQLException ex) {
            System.out.println("An error occurred when reading from the data base");
            ex.printStackTrace();
        }
    }

再次感谢大家