从Java对象类型到SQL类型的标准映射在哪里定义?

时间:2019-02-26 17:37:09

标签: java sql jdbc

JDBC docs of setObject中,我发现了这句话:

  

JDBC规范指定了Java Object的标准映射   类型转换为SQL类型。

但是,我找不到此映射的定义位置。我发现的只是this。但这仅指定了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 :(得分:4)

您可以下载JDBC here的官方规范(因为您链接到Java 8文档,所以该规范适用于JDBC 4.2版)。具体来说,在附录的表B-3中。

对于JDBC类型CHARLONGNVARCHAR,Java类型的确为String,因此您的转换是安全的。

答案 1 :(得分:1)

您可以在此处找到类型映射:

Mapping SQL and Java Types(Java 1.5)

您要寻找的部分在表8.9.3中映射到Java对象类型的JDBC类型:

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