2016-11-06 50 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注入攻擊。

如果參數值來自您無法完全信任的來源,那麼最後一個參數非常重要。

的更多信息:

相關問題