如何在ms访问中显示开始日期和结束日期之间的日期

时间:2016-11-06 11:08:12

标签: java database ms-access prepared-statement

我的代码中有错误

net.ucanaccess.jdbc.UcanaccessSQLException: 
     UCAExc:::3.0.7 unexpected token: 2016 required: AND

这是我的代码

try{
    String sql = "Select id,nama,grup,tanggal from kuli where  tanggal between '"+ctgl.getText()+"' 'AND' '"+ctgl1.getText()+"'";
    pst = conn.prepareStatement(sql);
    rs = pst.executeQuery();
    jTable1.setModel(DbUtils.resultSetToTableModel(rs));
}
catch(Exception e)
{
    System.out.println(e);
}

3 个答案:

答案 0 :(得分:1)

SQL应该是这样的:

String sql = "Select id, nama, grup, tanggal from kuli where tanggal between #" + ctgl.getText() + "# and #" + ctgl1.getText() + "#";

ctgl.getText()ctgl1.getText()必须返回格式为:2016/11/05

的字符串

答案 1 :(得分:0)

您没有为date传递正确的ctgl.getText(),因为SQL查询无法检索数据。另外,不要在引号中使用“AND”。

您需要确保传递正确的日期格式。

此外,不建议像这样使用prepareStatement(即,在您的代码中使用字符串连接形成sql),这将允许跨站点脚本,而最佳做法是使用{{1 },prepareStatement.setString()等方法,

您可以查看有关跨站点脚本的here

答案 2 :(得分:0)

两个问题:

  1. 看起来您的SQL语法已损坏。 AND关键字周围不应有引号。

  2. 您不应该像这样将参数值嵌入到SQL中。相反,您应该使用PreparedStatement和占位符参数。

  3. 使用PreparedStatement有许多优点:

    • 这意味着您不需要弄清楚如何引用值。
    • 这意味着您不需要找出日期/时间文字的正确语法。
    • 这意味着您无需担心SQL注入攻击。

    如果参数值来自您无法完全信任的来源,那么最后一个非常重要。

    更多信息: