2016-03-01 4 views
0

Я на самом деле пытается выполнить delete from mytable where CreationDate < now() - interval '5 month'прохождение параметра Java подготовить заявление

Я хочу передать параметр 5 в ?

public static final StringBuilder SQL_MY_Query= new StringBuilder(
     "delete from mytable where CreationDate < now() - interval '? month'"); 

ps = con.prepareStatement(SQL_MY_Query.toString()); 
ps.setInt(1, 5); 

Я получаю сообщение об ошибке Sql Exception org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0. Как мы это исправить?

+3

Вопросительный знак внутри строкового литерала не является параметром-заполнителем. –

+2

Возможный дубликат: http://stackoverflow.com/questions/7796657/using-a-variable-period-in-an-interval-in-postgres –

+0

если индекс столбца вне допустимого диапазона, существует ли таблица? 0 столбцов ... – ThoFin

ответ

1

Значок вопроса должен заменить токен; не быть в строковом литерале.

Попробуйте это:

public static final StringBuilder SQL_MY_Query= new StringBuilder(
     "delete from mytable where CreationDate < now() - interval ? || ' month'"); 

Или (на основе: Using a variable period in an interval in Postgres):

public static final StringBuilder SQL_MY_Query= new StringBuilder(
     "delete from mytable where CreationDate < now() - (? || ' month')::interval"); 
+1

Вы пробовали это, ссылка, которую я опубликовал в комментариях, предполагает, что это должно быть '(? || 'month') :: interval' –

+0

Нет. Я никогда не пробовал postgresql. Не стесняйтесь редактировать. – cadrian

+1

У меня сейчас нет postgresql, так что мы на самом деле в одной лодке;) –

0

один из указанных ниже, может помочь. Взгляни.

Вариант 1: удалить из туЬаЫх где CreationDate < сейчас() - интервал? "

ps.setString (1, numMonth +" месяц ");

Вариант 2: удалить из туЬаЫе где CreationDate < NOW() - интервал (|| 'месяц'?) "

ps.setString (1, numMonth);