在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
常数的知识来安全地进行哪些强制转换。
答案 0 :(得分:4)
您可以下载JDBC here的官方规范(因为您链接到Java 8文档,所以该规范适用于JDBC 4.2版)。具体来说,在附录的表B-3中。
对于JDBC类型CHAR
和LONGNVARCHAR
,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