在使用JDBC和MySQL的查询之间

在使用JDBC和MySQL的查询之间,mysql,jdbc,Mysql,Jdbc,我试图解决,但我得到了除了最后一个日期意味着结束日期,我们作为一个输入 我尝试了5个不同的查询,但仍然得到了相同的结果。在MySQL中,日期类型映射到Java类Java.sql.Timestamp。因此,您应该使用这种类型来构建查询,而不是java.util.Date。下面是生成您需要的两个时间戳的代码: public int getdata(String startDate, String endDate) { PreparedStatement ps; int id = 0;

我试图解决,但我得到了除了最后一个日期意味着结束日期,我们作为一个输入

我尝试了5个不同的查询,但仍然得到了相同的结果。

在MySQL中,日期类型映射到Java类Java.sql.Timestamp。因此,您应该使用这种类型来构建查询,而不是java.util.Date。下面是生成您需要的两个时间戳的代码:

public int getdata(String startDate, String endDate) {
    PreparedStatement ps;
    int id = 0;
    try {
        /*
         * SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
         * java.util.Date startDat = formatter.parse(startDate);
         * java.util.Date endDat = formatter.parse(endDate);
         */
        // ps = connection.prepareStatement("select * from project.order Where PO_Date Between " + startDate + "' AND '" + endDate + "'");
        //ps = connection.prepareStatement("select * from project.order where PO_Date between ? AND DATE_ADD( ?, INTERVAL 1 DAY) ");
        //ps = connection.prepareStatement("SELECT * FROM project.order WHERE PO_Date between ? AND ?");
        ps = connection.prepareStatement("SELECT * FROM project.order WHERE PO_Date >= ? AND PO_Date <= ?");
        //ps = connection.prepareStatement("SELECT * FROM project.order WHERE PO_Date(now())>= ? AND PO_Date(now())<=?");  
        /*
         * ps.setDate(1, new java.sql.Date(startDate)); ps.setDate(2, new
         * java.sql.Date(endDate.getTime()));
         */
        ps.setString(1, startDate);
        ps.setString(2, endDate);

        ResultSet rs = ps.executeQuery();
        // System.out.println("value of rs "+rs);

        while (rs.next()) {
            ArrayList<String> arrlist = new ArrayList<String>();
            System.out.println(rs.getString(2));
            System.out.println(rs.getInt(1));
            System.out.println(rs.getString(4));
            System.out.println(rs.getString(5));
            System.out.println(rs.getString(6));
            System.out.println("***************");
            // System.out.print(rs.getDate("endDate"));
            Iterator<String> itr = arrlist.iterator();
            while (itr.hasNext()) {
                System.out.println(itr.next());
            }
        }
        rs.close();

    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
    return id;
}
}
然后使用第一个中间查询获得结果:

SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date startDate = formatter.parse(startDate);
java.util.Date endDate   = formatter.parse(endDate);

java.sql.Timestamp start = new Timestamp(startDate.getTime());
java.sql.Timestamp end   = new Timestamp(endDate.getTime());
请注意,我使用的是参数化的PreparedStatement,它避免或至少大大减少了SQL注入的可能性。

试试这个

PreparedStatement ps = con.prepareStatement("SELECT * FROM project.order
                                             WHERE PO_Date BETWEEN ? AND ?");
ps.setTimestamp(1, start);
ps.setTimestamp(2, end)

请告诉我们您使用的是哪一个数据库。您能更具体地说明这个问题吗?请注意您正在做什么。您仍然需要像以前一样定义格式化程序。我在这里的最后一条评论是:我的代码应该可以正常运行。您需要将事情分类,使字符串以某种格式包含有效日期。那就把我给你的剩下的东西剪贴吧,好吗?你有问题吗?上面的代码不起作用,请告诉我代码的其他解决方案。你会得到什么错误?告诉我它不起作用我帮不了你。
SELECT * FROM project.order po
   WHERE po.PO_Date IS NOT NULL
     AND TO_DATE(PO_Date, 'DD/MM/RRRR') >=
         TO_DATE('17/02/2015', 'DD/MM/RRRR')
     AND TO_DATE(PO_Date, 'DD/MM/RRRR') <=
         TO_DATE('20/06/2015', 'DD/MM/RRRR');