在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.VARCHAR
和Types.INTEGER
甚至结果是空的。
db layer或jdbc url上是否有任何配置可以为两个查询获取Types.VARCHAR
和Types.INTEGER
。
答案 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
以执行此转换。