1

首先感谢大家之前的帮助和建议。我只学习数据库和 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();
        }
    }

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

4

3 回答 3

1

那是个坏主意。这是这样做的方法:

   preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL WHERE initials = ? AND angetDate = ?");
   preStatment.setSring(1, initials);
   preStatment.setDate(2, new java.sql.Date(date.getTime()));
于 2013-09-27T12:38:46.653 回答
0

我建议不要以编程方式进行过滤器(在这种情况下进行 SQL 查询)。

您可以执行以下操作:

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:有关更多详细信息,请参阅链接。

希望对你有帮助^^

于 2013-09-27T12:22:25.537 回答
0

首先,

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

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

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

    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();
        }
    }

再次感谢你们

于 2013-09-27T22:11:49.453 回答