2016-11-06 49 views
0

我在我的代码如何显示的开始日期和结束日期在毫秒之间的日期存取权限

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

回答

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

+0

惊人的!谢谢布鲁......它的工作......非常感谢:D – Rahmad

+1

好的,谢谢,那就请标记为已回答。不要忘记使用参数的一般性建议。 – Gustav

0

您还没有经过适当的datectgl.getText(),因为SQL查询无法检索数据。另外,不要在引号中使用'AND'。

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

此外,不建议使用prepareStatement这样的(即,在代码中使用字符串串联形成的SQL),这将允许跨站点脚本,而最好的做法是使用prepareStatement.setString()setDate()等。方法,

你可以看看here关于跨站点脚本。

0

两个问题:

  1. 它看起来像你的SQL语法被打破。在AND关键字周围不应该有引号。

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

使用PreparedStatement具有许多优点:

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

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

的更多信息:

相关问题