ResultSetMetaData.getColumnTypeName返回UNKNOWN

时间:2016-06-23 06:09:42

标签: java mysql jdbc resultset

我有一个查询,其中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

有没有办法可以获得有效的列类型

2 个答案:

答案 0 :(得分:0)

如果getColumnType(int column)返回Types.DATE91),则表示您应该致电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)的文档。它说,

  

如果列类型是用户定义的类型,则为完全限定类型   名称被退回。