2016-11-06 2 views
0

У меня есть ошибка в моем кодекак показать дату между датой начала и датой окончания в мс Acces

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

удивительный !!!! спасибо broou ...... это работает ...... большое спасибо: D – Rahmad

+1

OK, спасибо, тогда отметьте как ответ. И не забывайте общий и хороший совет по использованию параметров. – Gustav

0

Вы не проходя надлежащее date для ctgl.getText(), потому что запрос SQL не смог получить данные. Кроме того, не используйте «AND» с кавычками.

Вам необходимо убедиться, что вы передали правильный формат даты.

Кроме того, не рекомендуется использовать prepareStatement как это (то есть, в вашем коде формируется SQL с использованием конкатенации строк), который позволит перекрестную скриптинг, а лучшая практика заключается в использовании prepareStatement.setString(), setDate() и т.д. . методы,

Вы можете посмотреть here о межсайтовых скриптингах.

0

Две проблемы:

  1. Похоже, ваш синтаксис SQL сломана. Не должно быть котировок вокруг ключевого слова AND.

  2. Вы не должны вставлять значения параметров в такой SQL. Вместо этого вы должны использовать параметры PreparedStatement и place-holder.

PreparedStatement Использование имеет ряд преимуществ:

  • Это означает, что вам не нужно выяснить, как процитировать значения.
  • Это означает, что вам не нужно указывать правильный синтаксис для литератур даты/времени.
  • Это значит, что вам не нужно беспокоиться об атаках по SQL-инъекциям.

Последнее очень важно, если значения параметров исходят от источника, которому вы не можете полностью доверять.

Дополнительная информация:

Смежные вопросы