我有一个查询,其中getColumnTypeName作为 UNKNOWN 返回 但是当调用 getColumnType 时,它会返回有效结果 92 TIME
我已经从here
验证了它 Class.forName("com.mysql.jdbc.Driver");
System.out.println("Connecting to database...");
con= DriverManager.getConnection("jdbc:mysql://localhost/test","root","1234");
System.out.println("Creating statement...");
stmt = con.createStatement();
rs = stmt.executeQuery("select case when id>0 then last_day(date) else makedate(2015,1) end as date from emp.tabDate");
ResultSetMetaData rsmd=rs.getMetaData();
System.out.println(rsmd.getColumnTypeName(1));//returns UNKNOWN
System.out.println(rsmd.getColumnType(1));//returns 92
有没有办法可以获得有效的列类型
答案 0 :(得分:0)
如果getColumnType(int column)
返回Types.DATE
(91
),则表示您应该致电getDate()
。
命名约定并不难理解。如果getColumnType
返回Types.XXXXX
,则表示您应该致电getXxxxx()
。
很简单,对吧?
答案 1 :(得分:0)
根据java.sql.Types常量的Java文档,值92
代表java.sql.TIME。
您的sql语句包含表达式,派生结果必须是92
类型,即java.sql.TIME
。如果正确,请尝试 CAST
将表达式结果设为TIME
并查看结果。
CAST上的示例:
select cast(
case when id>0
then last_day(date)
else makedate(2015,1)
end as time ) as expr_res
from emp.tabDate
另请参阅getColumnTypeName(int)的文档。它说,
如果列类型是用户定义的类型,则为完全限定类型 名称被退回。