Как мне прочитать НОМЕР PL / SQL в Java ResultSet? - PullRequest
0 голосов
/ 24 января 2019

Наша база данных PL / SQL содержит три переменные NUMBER, которые представляют точный день, месяц и год.

Я хочу прочитать эти значения в строку в Java для отображения, но rs.getString ("[Number_field]") передает исключение "Недопустимое имя столбца" и rs.getInt ("[Number_field]") делает то же самое (см. фрагмент кода ниже).И, поскольку слово «число» используется для описания каждого преобразования строки, когда-либо созданного в истории кодирования, я не могу найти ссылку на правильную функцию, которая будет использоваться для моего ResultSet.

String sDate1= rs.getString("DATE_MNTH")+"/"+rs.getString("DATE_DT"+"/"+rs.getString("DATE_YEAR"));

Date date=new SimpleDateFormat("MM/DD/yyyy").parse(sDate1);  

Как правильно читать НОМЕР PL / SQL из ResultSet?

Ответы [ 3 ]

0 голосов
/ 25 января 2019

На самом деле это оказалось ошибкой в ​​том, как я вернул эти столбцы в наборе результатов - то есть я забыл добавить их в запрос!

Как только я добавил их так, чтобы они фактически были частью набора результатов, я обнаружил, что rs.getString () работает отлично - как и rs.getInt (), и rs.getBigDecimal (), предложенный Тимом Бигелайзеном.

Спасибо Ивану в комментариях за то, что он заставил меня перечитать появившееся сообщение об ошибке - и заставил меня подумать о , почему Имя столбца будет недействительным.

0 голосов
/ 25 января 2019

В вашем утверждении есть опечатка:

rs.getString ("DATE_MNTH") + "/" + rs.getString ("DATE_DT" + "/" + rs.getString ("DATE_YEAR"));

вы не поместили закрывающую ")" для столбца DATE_DT.

В действительности вы пытаетесь получить два столбца из rs:

DATE_MNTH and
result of concatenation which looks like: DATE_DT/{whatever rs.getString("DATE_YEAR") has} ...

как пример "DATE_DT/ 2019 "

Я почти уверен, что в Result Set нет такого столбца, как" DATE_DT / 2019 "... и об этом вам сообщит исключение.

Кстати: таких вещей неткак «PL / SQL DB» (это Oracle DB), а термин «переменная» имеет совершенно иное значение, чем «столбец» ...

0 голосов
/ 24 января 2019

Согласно таблице сопоставлений Oracle JDBC тип Oracle NUMBER, который является точным типом, сопоставляется с BigDecimal Java.Итак, вы можете попробовать использовать ResultSet#getBigDecimal:

String day = rs.getBigDecimal("day_field");
String month = rs.getBigDecimal("month_field");
String year = rs.getBigDecimal("year_field");

String output = year + "-" + month + "-" + day;

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

...