jdbc:从 java.sql.type 代码中获取 SQL 类型名称Java 8 及更高版本:JDBCType & SQLType

2022-09-01 05:33:53

我有一个带有字段名称和jdbc类型代码的数组。(您可以在其中找到的那些 int 代码

http://download.oracle.com/javase/1.4.2/docs/api/constant-values.html#java.sql.Types.BIT

我使用4级驱动程序。

我不知道如何向驱动程序询问相应的 SQL (DDL) 类型名称。这在jdbc和母语方言中很有用。

我有
(CustomerId, 1) (CustomerName, -8)

我想要

(customerId, INT)(客户 Id, VARCHAR(200))

在哪里可以找到对我有帮助的函数?我通过zxJDBC在jython中使用jdbc,所以我可以使用所有java和python DB API 2.0功能。


答案 1

Java 8 及更高版本:JDBCType & SQLType

随着API的改进,从Java 8和JDBC 4.2开始,我们有JDBCTypeSQLType,并且与其他一些示例的精神相同,可以简单地使用如下:

String typeName = JDBCType.valueOf(-5).getName();

但是,当然,为什么要使用数字类型开始。养成习惯,从数字切换到中定义的常量:enumJDBCType

String typeName = JDBCType.BIGINT.getName();

et voilà!

但是,这可能不足以在DDL中使用足够好的东西......您可能需要实施特定于供应商的转换。例如,在 Oracle 的情况下,您可能需要考虑将其转换为。VARCHARVARCHAR2


答案 2

为了具体回答“从java获取SQL类型名称.sql.Type code”,如果您使用的是可以进行反射的java版本,这里有一个小型实用程序方法,几乎可以做同样的事情:

public Map<Integer, String> getAllJdbcTypeNames() {

    Map<Integer, String> result = new HashMap<Integer, String>();

    for (Field field : Types.class.getFields()) {
        result.put((Integer)field.get(null), field.getName());
    }

    return result;
}

添加到您的导入申报中。一旦你有了它,只需按如下方式使用它:import java.lang.reflect.Field;

...
Map<Integer, String> jdbcMappings = getAllJdbcTypeNames();

String typeName = jdbcMappings.get(-5); // now that will return BIGINT
...

推荐