Как использовать функцию SQL RANDOM() в NetBeans JavaDB
Мне нужно сделать вызов SQL в небольшой локальной JavaDB в Netbeans 7.2, чтобы извлечь одну случайную строку из базы данных.
SELECT * FROM JAVA2.FORTUNES ORDER BY RANDOM()
До сих пор у меня это работало с использованием функции RANDOM(), но у меня проблемы с тем, чтобы заставить LIMIT 1 работать, он возвращает синтаксическую ошибку.
Я знаю, что в каждой базе данных есть разные способы сделать это, и я не могу понять, как она работает специально для этой JavaDB в Netbeans (я заставил ее работать в отдельной базе данных Oracle с другим синтаксисом).
Существует ли специфический для Java DB или ANSII стандартный способ возврата одной строки с использованием приведенного выше синтаксиса?
2 ответа
Java DB использует синтаксис SQL OFFSET/FETCH для получения этой функциональности.
Предполагая, что RANDOM() упорядочивает их правильно, должен работать следующий синтаксис:
SELECT * FROM JAVA2.FORTUNES ORDER BY RANDOM() OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY
От http://db.apache.org/derby/faq.html
Дерби не поддерживает синтаксис LIMIT. Однако в Derby 10.4 добавлена функция ROW_NUMBER, а в Derby 10.7 добавлены предложения OFFSET и FETCH.
Derby также поддерживает ограничение количества строк, возвращаемых запросом через JDBC. Например, чтобы получить первые 5 строк большой таблицы:
Statement stmt = con.createStatement(); stmt.setMaxRows(5); ResultSet rs = stmt.executeQuery("SELECT * FROM myLargeTable");