Чтение логического значения из базы данных Oracle с помощью JDBC

#java #oracle #jdbc #oracle11g

Вопрос:

Java SE 8, Oracle Database 11.2

Я реализую логическое значение с номером типа данных Oracle SQL (1). Имя столбца ЗАВЕРШЕНО.

 SQL> SELECT QUEUE_MSG_ID FROM PROCESSED_RECORDS_EWS_BACKOUT WHERE DONE = 1;

QUEUE_MSG_ID
--------------------------------------------------------------------------------
414d51205030303151303120202020204a486c6102340c2d
414d51205030303151303120202020204a486c6102160d2d
414d51205030303151303120202020204a486c611f30fe2c

SQL>
 

Фрагмент Java

     try (
        Connection qmtDatabase = getLocalhostConnection();
        Statement selectJmsMessageIdDone = qmtDatabase.createStatement();
        ResultSet resultSet = selectJmsMessageIdDone.executeQuery("SELECT QUEUE_MSG_ID, DONE FROM "   tableName);
        ) {
      while (resultSet.next()) {
        String jmsMessageId = resultSet.getString(1);

        BigDecimal doneBD = resultSet.getBigDecimal(2);
        // If done, then doneBD equals 1.
 

Знайте это tableName.equals("PROCESSED_RECORDS_EWS_BACKOUT") и то, что я остановился на точке останова, где jmsMessageId.equals("414d51205030303151303120202020204a486c6102340c2d") . Почему тогда

 !(doneBD.compareTo(BigDecimal.ONE) == 0)
 

?

Комментарии:

1. См BigDecimal::compareTo .

2. SQL в вашей Java-программе не ограничивает значение DONE значением 1, так что бы вы не ожидали, что некоторые записи будут иметь это значение?

3. У меня есть ограничение (0,1) на DONE.

4. Последние драйверы JDBC будут корректно работать при использовании ResultSet.getBoolean() в этом столбце (0 дает false, > 0 дает true)

5. Я не уверен, что понимаю вашу проблему. Какое значение !(doneBD.compareTo(BigDecimal.ONE) == 0) вы получаете? Я получаю false , но это то, что я ожидал: doneBD равно 1, поэтому doneBD.compareTo(BigDecimal.ONE) равно нулю (поскольку значения сравниваются равными), так !(doneBD.compareTo(BigDecimal.ONE) == 0) и есть false .