2015-02-23 2 views
1

Я работаю с JDBC и PostgreSQL, и я должен сделать следующее:Использование JDBC написать запрос

/* 
* Return list of film titles whose length is equal to or greater 
* than the minimum length, and less than or equal to the maximum 
* length. 
*/ 
public List<String> getFilmTitlesBasedOnLengthRange(Connection connection, 
       int minLength, int maxLength) { 
     List<String> result = new LinkedList<String>(); 

     return result; 
} 

Я пытался сначала решить эту проблему, написав запрос в PostgreSQL (не уверен, если это даже правильно):

SELECT title 
FROM dv_film A, dv_film B 
WHERE (A.length >= (COUNT(length) ASC LIMIT 1)) AND (B.length >= (COUNT(length) DESC LIMIT 1)); 

dv_film соотношение:

CREATE TABLE dv_film (
         film_id  integer, 
         title  varchar(50), 
         description text, 
         length  smallint, 
         rating  mpaa_rating 
); 

Моя попытка пытается решить эту проблему является:

public List<String> getFilmTitlesBasedOnLengthRange(Connection connection, 
         int minLength, int maxLength) { 
       List<String> result = new LinkedList<String>(); 

       PreparedStatement st = conn.prepareStatement("SELECT title FROM dv_film A, dv_film B WHERE (? >= (COUNT(length) ASC LIMIT 1)) AND (? >= (COUNT(length) DESC LIMIT 1));"); 

       return result; 
     } 
+0

здесь есть несколько проблем. sql кажется очень смущенным, я бы использовал BETWEEN для этого, mutliple aliases кажутся ненужными здесь. сначала попробуйте упростить это, а затем посмотрите учебник jdbc. –

ответ

0

Ваше заявление:

PreparedStatement st = conn.prepareStatement("SELECT title FROM dv_film A, dv_film B WHERE (? >= (COUNT(length) ASC LIMIT 1)) AND (? >= (COUNT(length) DESC LIMIT 1));"); 

Здесь вы пытаетесь передать имена столбцов PreparedStatement и вы не можете установить имена столбцов в качестве значений PreparedStatement. Вы можете установить только значения столбцов как значения PreparedStatement

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