我在 MySQL 数据库中有一个 DATETIME
列。我使用 ResultSet
元数据来检索列类型,它返回 TIMESTAMP
这是不正确的。如何获取此列的正确 java.sql.SQLType
值?
我会尝试更具体。我用 Java 代码定义数据库的结构。例如;
Column TITLE = new Column(JDBCType.VARCHAR).size(100).title("Created");
然后我的小型验证器代码创建此列(假设表定义在那里)。然后,稍后如果我将此代码修改为
Column TITLE = new Column(JDBCType.VARCHAR).size(200).title("Created");
我的小型验证器将列大小更改为 200。为此,我将元数据检索为
DatabaseMetaData metaData = connection.getMetaData();
然后访问列属性
ResultSet resultSet = metaData.getColumns(getCatalog(), schema, table, columnName);
这将返回 JDBCType
枚举。假设我在 MySQL DATETIME
列上运行此查询。我确实知道在Java中没有这样的东西,它的等价物是 java.sql.Timestamp
类。但在 MySQL 中,DATETIME 不是 TIMESTAMP。
如何在Java代码中区分MySQL DATETIME
和MySQL TIMESTAMP
?
从通用 JDBC 角度来看,您可以使用
DatabaseMetaData .getColumns(...)
,这应该返回:换句话说,它应该包含数据源中使用的数据类型的名称(在您的情况下,MySQL应该返回
DATETIME
)。注意:我还没有真正验证过这一点,我的答案纯粹基于通用 JDBC 要求。