Где определено стандартное сопоставление типов объектов Java с типами SQL? - PullRequest
0 голосов
/ 26 февраля 2019

В документах JDBC setObject я нашел это предложение:

Спецификация JDBC определяет стандартное сопоставление типов объектов Java с типами SQL.

Однако я не могу найти, где определено это отображение.Все, что я нашел, это это .Но это только определяет соответствие между типами SQL и типами JDBC.Но я не понимаю, как я могу перейти от типа JDBC к типам Java.

В частности, мне интересно, например, гарантированно ли, например, что этот код никогда не выдаст InvalidCastException:

int type = resultSet.getMetadata().getColumnType(1);
if (type == Types.LONGNVARCHAR || type == Types.CHAR) {
    String abc = (String)resultSet.getObject(1);
}

В этом случае вполне интуитивно понятно, что можно ожидать String, но есть много других типов SQL, для которых у меня нет такой интуиции.

Я просто не могу найти таблицу, сообщающую, чтоприведение типов может быть безопасно выполнено на основе знания константы java.sql.Types.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете найти соответствия типов здесь:

Отображение типов SQL и Java (Java 1.5)

Часть, которую вы ищете, находится в таблице 8.9.3 типа JDBC, сопоставленных с типами объектов Java:

JDBC Type       Java Object Type
=============   ==============================
CHAR            String
VARCHAR         String
LONGVARCHAR     String
NUMERIC         java.math.BigDecimal
DECIMAL         java.math.BigDecimal
BIT             Boolean
TINYINT         Integer
SMALLINT        Integer
INTEGER         Integer
BIGINT          Long
REAL            Float
FLOAT           Double
DOUBLE          Double
BINARY          byte[]
VARBINARY       byte[]
LONGVARBINARY   byte[]
DATE            java.sql.Date
TIME            java.sql.Time
TIMESTAMP       java.sql.Timestamp
DISTINCT        Object type of underlying type
CLOB            Clob
BLOB            Blob
ARRAY           Array
STRUCT          Struct or SQLData
REF             Ref
JAVA_OBJECT     underlying Java class
0 голосов
/ 26 февраля 2019

Вы можете скачать официальную спецификацию для JDBC здесь (поскольку вы ссылаетесь на документацию по Java 8, спецификация будет для JDBC версии 4.2).В частности, он приведен в таблице B-3 в приложениях.

Для типов JDBC CHAR и LONGNVARCHAR тип Java действительно String, поэтому ваше приведение безопасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...