2016-06-23 29 views
2

我對其中getColumnTypeName返回UNKNOWN 但當getColumnType調用它返回有效結果的查詢 TIME了ResultSetMetaData.getColumnTypeName返回UNKNOWN

我從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

根據關於常量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)。它說,

如果列類型是用戶定義類型,則返回完全限定類型 名稱。

0

如果getColumnType(int column)返回Types.DATE91),那麼這意味着您應該調用getDate()

命名約定並不難理解。如果getColumnType返回Types.XXXXX,則表示您應該致電getXxxxx()

夠簡單吧?

+0

其實我需要有效類型的結果集列不會導致.. –

+0

對不起,我不理解你。有效的JDBC列類型是「DATE」。 – Andreas