#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
.