对于学校项目,我试图生成一个图表,显示SQL表中两个日期之间的所有条目。我使用以下代码:
int bLost = 0;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strstartDate = sdf.format(startDate.getDate());
String strendDate = sdf.format(endDate.getDate());
try {
conn = JavaConnect.ConnecrDb();
pst = conn.prepareStatement("SELECT COUNT(*) FROM lost"
+ " WHERE Datecreated >= " + strstartDate
+ " AND Datecreated <=" + strendDate );
rsLost = pst.executeQuery();
if (rsLost.next()) {
bLost = rsLost.getInt(1);
}
} catch (Exception e) {
System.out.println(e.getMessage());
JOptionPane.showMessageDialog(null, "Table cannot be found");
}
// this is some stuff for the graph
DefaultCategoryDataset bagStats = new DefaultCategoryDataset();
// This should show me how many entries it found
bagStats.setValue(bLost, "Bagage Lost", "Bagage Lost");
如果我执行没有这样的日期部分的语句,代码可以正常工作:
pst = conn.prepareStatement("SELECT COUNT(*) FROM lost"
我也尝试过使用BETWEEN语句,但它也没有用。
我完全没有想法,我真的很感激任何帮助!
卡斯帕
答案 0 :(得分:0)
你需要在sql代码中的字符串周围加上引号,所以它的内容如下:
pst = conn.prepareStatement("SELECT COUNT(*) FROM lost"
+ " WHERE Datecreated >= \'" + strstartDate
+ "\' AND Datecreated <=\'" + strendDate + "\'");
每当构造sql语句时,最好在调试时在命令行或消息框中打印字符串语句,这样就可以准确地看到传递的内容。
此外,如果接受用户输入变量,最好参数化查询以避免sql注入攻击的可能性。