在使用JDBC和MySQL的查询之间
我试图解决,但我得到了除了最后一个日期意味着结束日期,我们作为一个输入 我尝试了5个不同的查询,但仍然得到了相同的结果。在MySQL中,日期类型映射到Java类Java.sql.Timestamp。因此,您应该使用这种类型来构建查询,而不是java.util.Date。下面是生成您需要的两个时间戳的代码:在使用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;
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');