当我选择AS关键字的常量时,PostgreSQL返回java.sql.Types.OTHER

bah*_*tan 6 java postgresql jdbc

在java上运行Postgres上的select时

SELECT '' AS COL1, 0 AS COL2 FROM MYTABLE 1=2;
Run Code Online (Sandbox Code Playgroud)

列类型Types.OTHER适用于COL1和COL2.因为很明显结果集没有任何行.

但是如果我使用以下查询在结果集中有行:

SELECT '' AS COL1, 0 AS COL2 FROM MYTABLE;
Run Code Online (Sandbox Code Playgroud)

COL1的类型仍然Types.OTHER是COL2类型Types.INTEGER.在我来说,我需要Types.VARCHARTypes.INTEGER甚至结果是空的.

是否有数据库层或JDBC URL上的任何配置,以获得Types.VARCHARTypes.INTEGER既为两个查询.

wer*_*ero 2

Postgres JDBC 驱动程序 9.4.1212 将常量 0 的类型报告为Types.INTEGER= 4,无论是否有结果(这也可能取决于服务器版本 - 我使用 9.4 服务器进行测试)。

字符串常量仍报告为Types.OTHER。对于此类列ResultSetMetaData.getColumnClassName(i)返回java.lang.String,因此如果遇到 a ,Types.OTHER您可以使用此信息将该列识别为字符列。

如果您希望ResultSetMetaData返回所需的类型,请从 Github 获取源代码并修补ResultSetMetaData以执行此转换。

  • 但是......在 PostgreSQL 中,“xyz”文字*不是*字符串,也不是 varchar 或文本。这是“未知”。JDBC 驱动程序在这里是正确的,将其报告为“Types.OTHER”。(注意:[这应该在未来版本中更改](https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=1e7c4bb0049732ece651d993d03bb6772e5d281a)。 (2认同)