Запрос возврата значений из Oracle и отсутствие записей при запуске из Java - PullRequest
0 голосов
/ 04 ноября 2011

Этот запрос возвращает запись с минимальной отметкой времени создания для Pers_ID персоны, когда я запускаю ее в SQL Developer, и тот же запрос не возвращает никакого значения из соединения JDBC Java.

Не могли бы вы помочь?

select PERS_ID,CODE,BEG_DTE 
from PRD_HIST H 
where PERS_ID='12345'
and CODE='ABC'
and CRTE_TSTP=(
  select MIN(CRTE_TSTP) 
  from PRD_HIST S 
  where H.PERS_ID=S.PERS_ID 
  and PERS_ID='12345' 
  and EFCT_END_DTE is null
)

Java-код

 public  static List<String[]> getPersonwithMinCreateTSTP(final String PERS_ID,final String Category,final Connection connection){
    final List<String[]> personRecords = new ArrayList<String[]>();
    ResultSet resultSet = null;
    Statement statement = null;
    String PersID=null;
    String ReportCode=null;
    String effBegDate=null;

    try{
    statement = connection.createStatement();
    final String query="select PERS_ID,CODE,EFCT_BEG_DTE from PRD_HIST H where PERS_ID='"+PERS_ID+"'and CODE='"+Category+"'and CRTE_TSTP=(select MIN(CRTE_TSTP) from PRD_HIST S where H.PERS_ID=S.PERS_ID and PERS_ID='"+PERS_ID+"' and EFCT_END_DTE is null)";

if (!statement.execute(query)) {
          //print error
        }
        resultSet = statement.getResultSet();
    while (resultSet.next()) {
    PersID=resultSet.getString("PERS_ID");
    ReportCode=resultSet.getString("CODE");
    effBegDate=resultSet.getString("EFCT_BEG_DTE");
    final String[] personDetails={PersID,ReportCode,effBegDate};
            personRecords.add(personDetails);
        }


    } catch (SQLException sqle) {
        CTLoggerUtil.logError(sqle.getMessage());
    }finally{ // Finally is added to close the connection and resultset
        try {
            if (resultSet!=null) {
                resultSet.close();
            }if (statement!=null) {
                statement.close();
            }
        } catch (SQLException e) {
                    //print error
        }
    }
        return personRecords;
}

Ответы [ 3 ]

1 голос
/ 05 ноября 2011

Распечатайте оператор SQL SELECT из вашей Java-программы, вставьте его в SQL * Plus и посмотрите, что происходит. Скорее всего, вы не установите свои переменные так, как вы думаете. Фактически, вы, вероятно, увидите ошибку, когда вы распечатываете инструкцию SELECT, даже не выполняя ее - значения нижнего регистра, когда требуется верхний регистр и т. Д.

Если вы все еще не видите его, опубликуйте фактический запрос из своего кода Java здесь.

0 голосов
/ 15 ноября 2016

В таблице базы данных есть записи, но клиент JDBC не может получить записи.Означает, что у клиента JDBC нет привилегий выбора.Пожалуйста, запустите приведенный ниже запрос в командной строке:

grant  all on emp to hr;
0 голосов
/ 11 октября 2014

Я пришел сюда с похожей проблемой - просто подумал, что выложу свое решение для других после - я не запускал "COMMIT" после вставок, которые я сделал (через sqlplus) - дох!

...