JDBC 4 заказ по пункту - PullRequest
       8

JDBC 4 заказ по пункту

0 голосов
/ 26 марта 2012

Могу ли я получить подготовленный оператор со следующим запросом:

select * from table as t order by ? ? limit ?,? 

где второе "?"будет asc или desc.

Спасибо.

Ответы [ 3 ]

6 голосов
/ 26 марта 2012

Это невозможно, см. Здесь:

Внутри оператора в качестве маркеров параметров могут использоваться символы «?» чтобы указать, где значения данных должны быть связаны с запросом позже, когда Вы выполняете это. Символы «?» Не должны быть заключены в кавычки, даже если вы собираетесь связать их со строковыми значениями. Маркеры параметров можно использовать только там, где должны появиться значения данных, не для ключевых слов SQL, идентификаторов и т. д.

Документация MySQL

1 голос
/ 26 марта 2012

Попытка действительно лучшая вещь. Я не верю, что вы можете связать имена таблиц или столбцов, только параметры. Так что мой ответ «нет», вы не можете. Но лучший способ ответить на это - попробовать и посмотреть. Это будет быстрее и точнее, чем спрашивать здесь.

0 голосов
/ 28 марта 2012

Если комбинации столбцов и направлений сортировки ограничены и операторы не слишком сложны, вы можете смоделировать их с помощью объединения.Но это не очень элегантно.Операторы должны быть там n раз, а маркеры параметров тоже должны быть там n раз.Если вы используете фреймворк, такой как springs, jdbc-template, вы можете назвать параметры, и нет опасности ошибочного подсчета положения параметров.

select * from table where ? = 'col1' and ? = 'asc' order by col1 asc
union all
select * from table where ? = 'col1' and ? = 'desc' order by col1 desc
union all
select * from table where ? = 'col2' and ? = 'asc' order by col2 asc
union all
select * from table where ? = 'col2' and ? = 'desc' order by col2 desc
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...