2016-08-16 2 views
1

Использование PreparedStatement в Java Я столкнулся с странной ситуацией, которую я не смог разрешить с помощью SO или поиска в Интернете.PreparedStatement ResultSet - Столбец содержит выбранное имя столбца как String вместо фактических значений выбранного столбца

preStatement = connection.prepareStatement("SELECT ?, Date FROM " + paramTable + " WHERE [...]"); 
preStatement.setString(1, paramColumn); 
ResultSet rs = preStatement.executeQuery(); 
preStatement.close(); 

Проблема здесь состоит в том, что столбец paramColumn, который выбран из paramTable таблицы содержит только float -типа значения в базе данных, однако, когда я исполняю PreparedStatement первый столбец возвращается с типом базы данных nvarchar.

Например, если я SELECT MyValue, Date FROM ValueTable ResultSet будет выглядеть

________________________ 
| MyValue | Date  | 
| MyValue | 2014-09-09 | 
| MyValue | 2014-09-10 | 
.... 

в то время как он должен выглядеть

________________________ 
| MyValue | Date  | 
| 26,567 | 2014-09-09 | 
| 28,623 | 2014-09-10 | 
.... 

Когда я исполняю эту инструкцию SQL в консоли управления я получаю правильные значения нет но в Java столбец всегда содержит имя столбца как String.

+2

Вы не можете использовать заполнитель в качестве имени столбца – Jens

+1

Я не думаю, что вы можете использовать 'PreparedStatement' подобное. 'preStatement.setString (1, paramColumn);' устанавливает строковый литерал, а не имя столбца. – bradimus

+0

Действительно, конкатенация работала по предложению @sidgate –

ответ

3

Просто сцепить имя столбца в строке запроса

preStatement = connection.prepareStatement("SELECT "+paramColumn+", Date FROM " + paramTable + " WHERE [...]"); 
+0

Действительно, спасибо! –

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