Выборка Desc: n строк в java

#java #sql #oracle

#java #sql #Oracle

Вопрос:

У меня есть метод, который содержит подобный запрос

 public List<Order> getOrders (int customer_id, int count)
{
  String sql= "select * from order where customer_id = ? order by order_id DESC FETCH FIRST ? ROWS 
  ONLY"
}
 

Что я хочу сделать, так это перечислить заказы в соответствии с заданными входными данными (количество).Я получаю такую ошибку

 Missing IN or OUT parameter at index:: 2
 

Если я удалю вторую? и я пишу DESC FETCH FIRST 5 ROWS , что он выполняется успешно.Я думаю, что я не мог использовать параметр salary в операторе выборки DESC.У вас есть какие-либо идеи?

Комментарии:

1. Можете ли вы опубликовать другие части кода, поскольку опубликованная вами функция — это только запрос, и вы, вероятно, что-то упускаете при замене значений?

Ответ №1:

Действительно, в order_by_clause и row_limiting_clause DESC нет ограничений для порядка

вы должны каким-то образом не устанавливать второй параметр

Вот рабочий пример JDBC с отмеченной строкой, которая при закомментировании приводит к вашему исключению

 def stmt = con.prepareStatement("""select order_id from getOrders 
                                   where customer_id = ? 
                                   order by order_id DESC
                                   FETCH FIRST ? ROWS ONLY""")
stmt.setInt(1,1001)  /* Bind customer_id = 1001 */
stmt.setInt(2,3)  /* bind count of rows = 3; uncomment to get java.sql.SQLException: Missing IN or OUT parameter at index:: 2  */

def rs = stmt.executeQuery()

while(rs.next())
  {
   println "order_id= ${rs.getInt(1)}"
  }
 

Комментарии:

1. Я использую spring Jdbc, а не обычный jdbc, но я постараюсь изменить ваш код на spring jdbc. Большое вам спасибо.

2. Используете ли вы JdbcTemplate или Spring Data JDBC? Если у вас все еще есть проблемы, опубликуйте свое полное заявление.