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

时间:2017-04-26 09:20:12

标签: java postgresql jdbc

在Postgres上运行select on java

SELECT '' AS COL1, 0 AS COL2 FROM MYTABLE 1=2;

COL1和COL2的列类型均为Types.OTHER。因为很明显结果集没有任何行。

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

SELECT '' AS COL1, 0 AS COL2 FROM MYTABLE;

COL1的类型仍为Types.OTHER,但COL2类型为Types.INTEGER。在我的情况下,我需要Types.VARCHARTypes.INTEGER甚至结果是空的。

db layer或jdbc url上是否有任何配置可以为两个查询获取Types.VARCHARTypes.INTEGER

2 个答案:

答案 0 :(得分:3)

尝试显式演员:

SELECT ''::VARCHAR  AS COL1, 0::INTEGER AS COL2 FROM MYTABLE;

答案 1 :(得分:2)

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

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

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